Дублирование тегов

Тема в разделе "JavaScript", создана пользователем KODEAK, 8 май 2015.

Модераторы: ZiX
  1. KODEAK

    KODEAK

    Регистр.:
    11 апр 2009
    Сообщения:
    160
    Симпатии:
    15
    Использую https://github.com/blueimp/jQuery-File-Upload для загрузки файлов, для каждого файла генерируется свою ключ, который обрабатывается потом через тег (пример ).
    Если загрузить один файл и нажать на кнопку add все хорошо, в форму добавляется тег, но вот если загрузить еще файлов то кнопка add будет вставлять форму не одну пару тега, а столько сколько файлов загрузили, где коварная ошибка может быть которая дублирует теги?

    Код:
    $('#InputImage').fileupload({
        url: '',
        type: 'POST',
        dataType: 'json',
        autoUpload: true,
        loadImageFileTypes: '/^image\/(jpg|jpeg|png)$/',
        done: function(e, data) {
            if(data.result.status) {
                $('#post-uploads').append('<button class="btn btn-success btn-add-attach pull-right" data-attach="'+data.result.attach+'">Add</button>');
                $('.btn-add-attach').click(function(){
                    var attach = $(this).data('attach');
                    $('#editor').insertAtCaret('[attach]'+attach+'[/attach]');
                });
            }
        }
    });
    insertAtCaret function
    Код:
    $.fn.insertAtCaret = function(myValue) {
        return this.each(function() {
            var me = this;
            if (document.selection) { // IE
                me.focus();
                sel = document.selection.createRange();
                sel.text = myValue;
                me.focus();
            } else if (me.selectionStart || me.selectionStart == '0') { // Real browsers
                var startPos = me.selectionStart, endPos = me.selectionEnd, scrollTop = me.scrollTop;
                me.value = me.value.substring(0, startPos) + myValue + me.value.substring(endPos, me.value.length);
                me.focus();
                me.selectionStart = startPos + myValue.length;
                me.selectionEnd = startPos + myValue.length;
                me.scrollTop = scrollTop;
            } else {
                me.value += myValue;
                me.focus();
            }
        });
    };
     
  2. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    364
    Симпатии:
    182
    Что-то я не совсем понял. Итак, нажали add - добавилось
    Код:
    [attach]1[/attach]
    после ещё раз нажали и в форме стало:
    Код:
    [attach]1[/attach]
    [attach]2[/attach]
    [attach]2[/attach]
    Так?
     
  3. KODEAK

    KODEAK

    Регистр.:
    11 апр 2009
    Сообщения:
    160
    Симпатии:
    15
    Несовсем, загрузили 3 файла, появилось 3 кнопки add для вставки ключа каждого файла, но если нажать 1 (для первого загруженного файла) кнопку вставится 3 раза ключь 1 файла, нажать 2 кнопку - вставиться 2 ключа второго файла, и только 3 кнопка вставит 1 ключ
     
  4. KODEAK

    KODEAK

    Регистр.:
    11 апр 2009
    Сообщения:
    160
    Симпатии:
    15
    Похожий функционал есть в phpbb когда вставлябтся теги вложений
     
  5. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    364
    Симпатии:
    182
    Мне кажется, что ошибка где-то у вас. Может код продублировали где-то, может ещё что. То что вы выложили работает вполне корректно.
    Как вариант можете попробовать такое решение:
    Код:
    $('#InputImage').fileupload({
        url: '',
        type: 'POST',
        dataType: 'json',
        autoUpload: true,
        loadImageFileTypes: '/^image\/(jpg|jpeg|png)$/',
        done: function(e, data) {
            if(data.result.status) {
               $('#post-uploads').append('<button class="btn btn-success btn-add-attach pull-right" data-attach="'+data.result.attach+'">Add</button>');
               $('.btn-add-attach').click(function(){
               var str=$('#editor').val();
               var attach='[attach]'+$(this).data('attach')+'[/attach]';
               if(str.indexOf(attach) <0) {
               $('#editor').insertAtCaret(attach);
                      }
                 });
             }
        }
    });