问题描述
我正在使用jQuery的“ .on”将点击附加到“更多项目”按钮上。 由于脚本的处理方式,此事件可能需要多次重新连接。
我想防止单击此按钮时触发多个事件。 我实际上是将事件附加到“文档”,并使用选择器定位按钮。 同样,这是因为重新加载和ajax调用使事件保持在“文档”上,所以它永远不会丢失。
下面是我的代码:
// Removes previous events
$(document).off('click','.moreItems');
// Attached new event
$(document).on('click','.moreItems', function(event) {
... do stuff ....
});
我一直在寻找堆栈voerflow的答案,但没有任何帮助。 一切都在谈论从初始对象(在这种情况下为“文档”)中删除事件,但是从不使用选择器(我可以找到)。
谢谢!
1楼
Alex W
2
已采纳
2015-08-07 14:21:12
如果保留对回调函数的引用,则可以使用删除其所有实例:
var callback = function(){console.log('callback executed');};
jQuery('.moreItems').on('click',callback);
jQuery('.moreItems').on('click',callback);
jQuery('.moreItems').off('click',callback);
2楼
schellingerht
1
2015-08-07 14:25:51
我不明白你的问题。
$(document).on('click','.moreItems', function(event) {
... do stuff ....
});
您将click事件委托给文档。 如果您使用类“ moreItems”动态添加元素,则click事件已自动绑定。
请参阅官方文档: :
永远不要这样做:
- 首先解除绑定,再进行绑定
- 同一元素上的多个绑定
3楼
fray88
0
2015-08-07 14:20:10
我将使用unbind和bind断断续续,我认为它们是同一函数的别名,还将事件附加到对象,而不是附加到文档本身,但这应该是可选的。
$('.moreItems').unbind('click').bind('click', function(event) {
//Your code
});
当您仅将事件类型作为参数调用unbind时,它将删除该事件的所有处理程序,我想这也是您想要的。