我使用jquery ui draggable,droppable插件。我写了这段代码:
$(".droppable").draggable({
containment:"window",
appendTo:$("#canvas"),
helper:"clone",
scroll:false
});
$("#canvas").droppable({
accept:".droppable",
drop:function(event,ui){
ui.draggable.draggable("destroy");
ui.draggable.draggable({
containment:"window",
appendTo:$("#canvas"),
helper:"clone",
scroll:false
});
}
});

但是它不起作用,我将它拖放到dropzone后,可拖动对象不再可拖动了。 如果我在jsfiddle(http://fiddle.jshell.net/te4sjtcz/)中写这个,一切正常,可拖动的对象在可拖动后仍然可拖动(" destroy")。
如果我使用console.log(ui.draggable.draggable(" instance")),它会产生:
<div.... etc.
<div.... etc
其他信息是,如果我使用ui.draggable.draggable(&#34;选项&#34;,&#34;键&#34;,&#34;值&#34;)格式进行设置,一切都很好再次。为什么我不能在代码中使用简单的.draggable({})格式,为什么它在jsfiddle中有效? (我使用相同的库)
更新1:我发现破坏者删除了这些类:ui-draggable ui-draggable-handle,重新附加后我不会看到它们。
更新2:如果我将重新连接块放入setTimeout(HERE,0),它就可以了。但这不是一个好的解决方法......因为我不知道为什么它解决了这个问题。
答案 0 :(得分:0)
您的代码适用于jquery-ui 1.9.2(您的jsFiddle项目),并且不适用于jquery-ui 1.11.3版本(您的代码片段项目)。 不同之处在于可拖动的破坏方法。从1.11.0版本the _destroy function just sets the destroyOnClear flag to true and returns开始,因此在退出droppable drop函数后会发生实际的“destroy”。
因此,如果绝对有必要在drop函数中再次创建相同的draggable,则setTimeout将非常有用。