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

KODEAK

Полезный
Регистрация
11 Апр 2009
Сообщения
172
Реакции
16
Использую Для просмотра ссылки Войди или Зарегистрируйся для загрузки файлов, для каждого файла генерируется свою ключ, который обрабатывается потом через тег (пример ).
Если загрузить один файл и нажать на кнопку 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();
        }
    });
};
 
Что-то я не совсем понял. Итак, нажали add - добавилось
Код:
[attach]1[/attach]
после ещё раз нажали и в форме стало:
Код:
[attach]1[/attach]
[attach]2[/attach]
[attach]2[/attach]
Так?
 
Несовсем, загрузили 3 файла, появилось 3 кнопки add для вставки ключа каждого файла, но если нажать 1 (для первого загруженного файла) кнопку вставится 3 раза ключь 1 файла, нажать 2 кнопку - вставиться 2 ключа второго файла, и только 3 кнопка вставит 1 ключ
 
Похожий функционал есть в phpbb когда вставлябтся теги вложений
 
Мне кажется, что ошибка где-то у вас. Может код продублировали где-то, может ещё что. То что вы выложили работает вполне корректно.
Как вариант можете попробовать такое решение:
Код:
$('#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);
                  }
             });
         }
    }
});
 
Назад
Сверху