JQuery клон, кажется, не сохраняет перетаскиваемые / сбрасываемые события - PullRequest
2 голосов
/ 25 августа 2010

У меня есть строка, в которую я могу перетаскивать объекты и сортировать их.Это все работает хорошо.У меня даже есть событие удаления для каждого элемента, поэтому его можно удалить из строки.

Мне нужен вариант, в котором я могу клонировать строку.Я делаю это с помощью функции клона ниже:

clonedrow = $("#row1").clone(true);
clonedid = "row"+nextRowNumber; //nextRowNumber is a variable calculated by counting the rows that exist already.
clonedrow.attr("id",clonedid).insertAfter("#row1");

Все это работает, за исключением того, что перетаскиваемые / сортируемые события в 'row1' не копируются в клонированную строку.Я делаю что-то неправильно?Я подумал, добавив «true», он копирует события ...?

FWIW при загрузке страницы, у меня есть функция, которая автоматически создает первую строку и применяет к ней события перетаскивания / сортировки / удаления...

Ответы [ 2 ]

4 голосов
/ 25 августа 2010

Я не слишком много знаю о перетаскиваемости, но, кажется, есть некоторое странное поведение при клонировании перетаскиваемого элемента с true.Возможно, вы не хотите, чтобы все data были клонированы, если некоторые из них должны относиться к этому элементу.

В этом простом примере, когда вы clone(true) один и пытаетесь перетащить клон, перетаскивается оригинал.

http://jsfiddle.net/ZmcHd/

Возможно, лучше простоповторно примените draggable().

clonedrow = $("#row1").clone().draggable();

http://jsfiddle.net/ZmcHd/1/

Если вам нужны другие настройки, я бы сохранил их в переменной, чтобы избежать дублирования.

var settings = {
        // some settings
}

clonedrow = $("#row1").clone().draggable(settings);
0 голосов
/ 25 августа 2010

jQuery копирует события и данные, если клону передан истинный параметр.Чтобы проверить, были ли переданы события, см. Свойство events данных элемента http://www.jsfiddle.net/zfSrR/1/

console.log($("#row1").data('events'));
console.log($(clonedrow).data('events'));
...