2013-02-25 147 views
0

我运行到使用jQuery UI和克隆元素一个奇怪的问题。即使jQuery UI事件似乎被正确复制,看起来事件仍然引用原始DOM对象,而不是克隆的。jQuery UI的克隆拖动元素也不能拖动

这个js小提琴说明问题:http://jsfiddle.net/XDrC5/

这里的HTML:

<button id="clone">Clone</button> 

<div id="source"> 
    <div id="elem"></div> 
</div> 

<div id="copy"> 
</div> 

和JavaScript:

$(document).ready(function() { 
    $("#elem").resizable({ 
     containment:"parent" 
    }).draggable({ 
     containment:"parent" 
    }); 

    $("#clone").on("click", function() { 
    var newHTML = $("#source").clone(true); 

     $("#copy").html(newHTML.contents()); 
    }); 
}); 

点击克隆正确复制在下面的对话框橙色正方形,但试图拖动新的广场结果在原来的广场移动。试图调整新广场的大小并没有任何意义。

这试图呼吁克隆元素jQuery UI的方法时,会导致更大的问题。例如,在克隆实际从原始元素中移除可拖动元素后,调用.draggable("destroy");,使新旧元素不可移动。

我不知道是否有办法解决,如果我只是被密集,或者如果这是一个不可避免的错误。任何帮助是极大的赞赏。

+1

部分原因是要创建一个使用相同的ID前面的一个新的div - 使用一个类来代替。 – Wez 2013-02-25 10:33:36

回答

1

我想响应甜菜,甜菜根的问题可能是做clone(true)要复制连接到以前elem这意味着新的ELEM是史迪威被告知到#source专区内调整事件,尝试没有true然后将可调整大小的事件重新附加到#copy div内的elem上。

我已经更新了的jsfiddle - http://jsfiddle.net/XDrC5/2/这似乎解决了可拖动的问题。问题的

+1

甜菜根 - 甜菜根已离开大楼。 – 2013-02-25 11:14:33

+0

感谢Wezly的回答,但这只是一个简化的测试案例。在实际的生产环境中,这些元素被动态地添加到DOM中,并且没有被ID或类所针对。这里 的问题是更多的,不像其他的事件处理程序,如“点击”,“鼠标悬停”,等等,这些都是是天然的JS或烤成的jQuery核心,jQuery UI的小部件不传递到他们的事件关联由clone(true)创建的新DOM元素。 – Odisant 2013-02-26 06:46:05

+0

Cheers'n,希望你找到你正在寻找的答案.. – Wez 2013-02-26 09:15:50