Javascript jquerydraggable—如果对一个元素应用两次,会发生什么?
直到最近,我才建立了这个系统,它被多次称为:Javascript jquerydraggable—如果对一个元素应用两次,会发生什么?,javascript,jquery,jquery-ui-draggable,Javascript,Jquery,Jquery Ui Draggable,直到最近,我才建立了这个系统,它被多次称为: $('.rsh') .draggable('destroy') .draggable({ blah blah details }); destroy用于阻止类上累积的多个可拖动处理程序。AJAX正在创建新元素,类的draggable的初始附件不会涉及随后创建的元素 但是,当我更
$('.rsh')
.draggable('destroy')
.draggable({ blah blah details });
destroy
用于阻止类上累积的多个可拖动处理程序。AJAX正在创建新元素,类的draggable
的初始附件不会涉及随后创建的元素
但是,当我更新到jQuery UI的1.9.2版时,它开始出现以下错误:
错误:无法在初始化之前对draggable调用方法;试图调用方法“destroy”
所以我去掉了破坏线,很甜蜜。除了我怀疑我现在可能正在向类添加越来越多的处理程序(这就是为什么destroy
一开始就存在的原因)
我试过这个,但它不喜欢:
if ($('.rsh').length) {
$('.rsh').draggable('destroy');
}
两个问题:(1)每次我启动draggable设置行时,是否会有越来越多的处理程序附加到类中?(2) 如果是这样,有什么解决方案可以移除它们吗 不,不会有额外的处理程序绑定。jQuery将初始化的实例注册到元素中,并且不会为同一元素创建同一小部件的新实例 由于您担心处理程序,这里有一个快速检查(jQuery 1.8+和UI 1.9+): 如您所见,尝试在同一元素上初始化新的可拖动实例后,不会更改附加的handlers对象
编辑:带有参数的后续调用不会被忽略,相反,它们将扩展现有的小部件,如@Jason Sperske的回答所示。对
.draggable()
的后续调用在附加到同一对象时扩展以前的调用(而不是像我最初认为的那样替换它们)。看这个例子(从法布里西奥·马特的扩展而来)()
哦,很好,我忘了考虑当前部件的扩展。1.作为补充。
$('div').draggable();
console.log( $._data($('div')[0], 'events') );
$('div').draggable();
console.log( $._data($('div')[0], 'events') );
<div>foo</div>
<script>
$('div').draggable({
start: function () {
console.log("drag 1");
}
});
console.log($._data($('div')[0], 'events'));
$('div').draggable({
stop: function () {
console.log("drag 2");
}
});
console.log($._data($('div')[0], 'events'));
</script>
drag 1 <- on start
drag 2 <- on stop