当前位置: 代码迷 >> JavaScript >> 使用“选择器”在jQuery中删除“ .on”点击事件;
  详细解决方案

使用“选择器”在jQuery中删除“ .on”点击事件;

热度:52   发布时间:2023-06-05 16:00:59.0

我正在使用jQuery的“ .on”将点击附加到“更多项目”按钮上。 由于脚本的处理方式,此事件可能需要多次重新连接。

我想防止单击此按钮时触发多个事件。 我实际上是将事件附加到“文档”,并使用选择器定位按钮。 同样,这是因为重新加载和ajax调用使事件保持在“文档”上,所以它永远不会丢失。

下面是我的代码:

  // Removes previous events 
  $(document).off('click','.moreItems');

 // Attached new event
  $(document).on('click','.moreItems', function(event) {
    ... do stuff ....
  });

我一直在寻找堆栈voerflow的答案,但没有任何帮助。 一切都在谈论从初始对象(在这种情况下为“文档”)中删除事件,但是从不使用选择器(我可以找到)。

谢谢!

如果保留对回调函数的引用,则可以使用删除其所有实例:

var callback = function(){console.log('callback executed');};

jQuery('.moreItems').on('click',callback);
jQuery('.moreItems').on('click',callback);

jQuery('.moreItems').off('click',callback);

我不明白你的问题。

$(document).on('click','.moreItems', function(event) {
   ... do stuff ....
});

您将click事件委托给文档。 如果您使用类“ moreItems”动态添加元素,则click事件已自动绑定。

请参阅官方文档: :

永远不要这样做:

  • 首先解除绑定,再进行绑定
  • 同一元素上的多个绑定

我将使用unbind和bind断断续续,我认为它们是同一函数的别名,还将事件附加到对象,而不是附加到文档本身,但这应该是可选的。

$('.moreItems').unbind('click').bind('click', function(event) {
   //Your code
});

当您仅将事件类型作为参数调用unbind时,它将删除该事件的所有处理程序,我想这也是您想要的。

  相关解决方案