直到最近,我才进行了多次调用:
$('.rsh')
.draggable('destroy')
.draggable({ blah blah details });
destroy
用于阻止多个可拖动处理程序在类上累积。 AJAX 正在创建新元素,并且 draggable
的初始附件不会触及后续创建的元素。
但是,当我更新到 jQuery UI 的 1.9.2 版时,它开始给我这个错误:
Error: cannot call methods on draggable prior to initialization; attempted to call method 'destroy'
所以我删除了 destroy 行,这很不错。除了...我怀疑我现在可能正在向该类添加越来越多的处理程序(这就是 destroy
首先出现的原因)。
我试过了,但不喜欢:
if ($('.rsh').length) {
$('.rsh').draggable('destroy');
}
两个问题:(1) 每次触发可拖动设置行时,是否会有越来越多的处理程序附加到类中? (2) 如果是这样,关于如何删除它们的任何解决方案?
最佳答案
不,不会绑定(bind)额外的处理程序。 jQuery 将初始化的实例注册到元素,不会为同一元素创建同一小部件的新实例。
由于您担心处理程序,这里有一个快速检查(jQuery 1.8+ 和 UI 1.9+):
$('div').draggable();
console.log( $._data($('div')[0], 'events') );
$('div').draggable();
console.log( $._data($('div')[0], 'events') );
如您所见,在同一元素上尝试初始化一个新的可拖动实例后,附加的处理程序对象没有改变。
编辑:不过,不会忽略带有参数的后续调用,而是它们将扩展现有的小部件,如@Jason Sperske 的回答所示。
关于javascript - jQuery 可拖动——如果它被应用到一个元素两次会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248361/