jquery clone似乎没有保留draggable / droppable事件

时间:2010-08-25 12:20:15

标签: jquery events clone draggable jquery-ui-sortable

我有一行可以将项目拖入其中,然后对它们进行排序。一切正常。我甚至在每个项目上都有一个删除事件,因此可以从行中删除它。

我想要一个可以克隆行的选项。我这样做是通过使用下面的克隆函数:

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 个答案:

答案 0 :(得分:4)

我不太了解draggable,但在使用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);

答案 1 :(得分:0)

如果clone传递true参数,jQuery复制事件和数据。为了测试是否已传递事件,请参阅元素数据http://www.jsfiddle.net/zfSrR/1/

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