销毁 JQuery 可拖动功能

11

我有一组可拖动的元素。如何取消它们的可拖动功能?

  1. 在我的情况下,$('.draggable').draggable('disable')不能使用。

  2. $('.draggable').draggable('destroy')会返回Uncaught TypeError: Cannot read property 'options' of undefined


两者都是有效的...http://api.jqueryui.com/draggable/#method-destroy 和 http://api.jqueryui.com/draggable/#method-disable - Dom
如果你只想要移除可拖动功能,为什么不提供禁用选项呢? - cernunnos
确保所有class为“draggable”的元素实际上都是“draggable-enabled”,并尝试仅销毁这些元素。我需要进行测试,但我怀疑如果你销毁的是不存在的东西,那么你会得到未定义的结果。 - Luke Jakimowicz
看起来运行良好 http://jsfiddle.net/arunpjohny/cY6ZY/ - Arun P Johny
稍微修改了Arun的fiddle:http://jsfiddle.net/cY6ZY/1/ - 如果你在一个已经销毁的元素上再次调用它,它会抛出一个错误。至少在jquery 1.9.1和ui 1.9.2中是这样的。这可能表明你的.draggable根本不可拖动(或不再可拖动)。 - Luke Jakimowicz
显示剩余5条评论
2个回答

13

来自jQuery UI API:

destroy()

完全删除可拖动功能。这将使元素返回到其初始状态。

This method does not accept any arguments.

代码示例:

调用 destroy 方法:

$( ".selector" ).draggable( "destroy" );

编辑

由于似乎无法正常工作,并且这是jQuery论坛中普遍存在的问题,以下是建议的修复方法:

ui.draggable.draggable("option", "revert", false);

"$('.draggable').draggable('destroy') 返回未捕获的 TypeError: 无法读取未定义的属性 'options'" - ab.helly
1
抱歉在发布前没有仔细阅读它。我已编辑了我的回答。 - emerson.marini
$(".selector").draggable.draggable("option", "revert", false); 不起作用... 我有什么遗漏吗? - Imran Bughio
@ImranBughio,这里的$(".selector")ui不同,请检查您的代码。 - emerson.marini
如果我尝试使用 ui,我会得到 Uncaught ReferenceError: ui is not defined(…) 的错误。 - Imran Bughio
@ImranBughio,您应该发一个问题。在评论区提问并不是一个好的建议,因为我们需要更多的细节、代码示例等才能回答您的问题。 - emerson.marini

1

在销毁之前需要进行检查

if ($el.data('ui-draggable')) { // error to call destroy if not there
  $el.draggable('destroy');
}

在jQuery >2.1.0中,它是'ui-draggable'。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接