gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:51 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com