javascript - jQuery 可拖动——如果它被应用到一个元素两次会发生什么?

标签 javascript jquery jquery-ui-draggable

直到最近,我才进行了多次调用:

                $('.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') );

Fiddle

如您所见,在同一元素上尝试初始化一个新的可拖动实例后,附加的处理程序对象没有改变。

编辑:不过,不会忽略带有参数的后续调用,而是它们将扩展现有的小部件,如@Jason Sperske 的回答所示。

关于javascript - jQuery 可拖动——如果它被应用到一个元素两次会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248361/

相关文章:

jquery - Rails 的模态窗口插件

javascript - 如何正确拖动 jqgrid 编辑表单?

Jquery 可拖动和可调整大小

javascript - 如何使用 JavaScript 淡入/淡出 HTML DIV 容器?

javascript - jQuery datepicker 导致页面溢出

javascript - 无法设置innerHTML

javascript - 我如何使用 javascript 添加 attr

jquery - 将拖动的对象放入区域后如何删除它

javascript - 为什么 function(){}() 不调用自身?

javascript - 如何使用 AJAX 内容填充 Google map 信息窗口?