我有一个应用程序,其中单击按钮并创建DOM元素的克隆副本并将其放置在页面上的特定位置。这个克隆的副本需要是一个深层副本,因为它的子元素中包含事件。因此,创建克隆的代码是:
var $cloneTags = $div.clone(true, true).attr('id', obj + num);
然而,当添加true, true
时,这会破坏克隆对象的可拖动功能(这只发生在第二个克隆和任何后续克隆)。如果我摆脱true, true
,这行代码会做它应该做的事情,后续对象是可拖动的:
$cloneTags.draggable({ cursor: "move", snap: '#dropHere', helper: "clone" });
但是这会影响子元素的事件处理程序不再起作用。
我的问题是如何创建深层副本但仍然可以将每个克隆元素单独拖动?
答案 0 :(得分:1)
我的建议是确保子项中的所有事件都由“事件委托”管理,而不是直接绑定到元素本身。
然后你可以使用浅层克隆而不会遇到冲突
而不是:
$('.my-draggable-item .someChild').click(function(){...})
待办事项
$('#mainContainer').on('click', '.my-draggable-item .someChild', function(){...})