jQuery document .off函数不会取消绑定事件

时间:2018-07-04 23:02:36

标签: javascript jquery

我已经为页面上的按钮设置了mouseenter和mouseleave事件。

$(document).on("mouseenter", ".item-fav-btn", highlightButton);
$(document).on("mouseleave", ".item-fav-btn", removeHighlightButton);

为了解除这些事件的绑定,我访问了与该类相同但其ID相同的一些按钮(该代码在循环内):

$(document).off("mouseenter", "#item-btn-" + id);   
$(document).off("mouseleave", "#item-btn-" + id);

问题在于事件没有被删除,并且对于该特定元素仍然处于活动状态。我认为这可能是因为我已经为一个类设置了事件,然后尝试使用元素的ID取消绑定它。我需要Id,因为我只取消绑定特定元素,而我需要类,是因为我为所有按钮,页面上存在的按钮以及使用Ajax之后出现的按钮初始化了事件。

是否可以通过使用Id选择器访问特定元素并仍然保持基于原始类选择器的绑定来取消绑定这些事件?

1 个答案:

答案 0 :(得分:1)

您关于类与ID的理论是正确的。

一个解决方案是添加另一个类,而不是尝试删除整个侦听器。然后在处理程序内部检查该类是否存在,然后再执行处理程序执行的任何操作


替代解决方案还添加了一个类,但是在原始事件绑定中使用了not()过滤器来忽略将新类添加到的元素

$(document).on("mouseenter", ".item-fav-btn:not(.new-class-name)", highlightButton);