JQuery UI可拖动破坏,然后拖动再次无法正常工作

时间:2015-03-18 14:02:51

标签: jquery jquery-ui jquery-ui-draggable

我使用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),它就可以了。但这不是一个好的解决方法......因为我不知道为什么它解决了这个问题。

1 个答案:

答案 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将非常有用。