首页 > 解决方案 > jQuery unbind 事件处理程序不起作用

问题描述

我正在动态地将节点(div)添加到 DOM 树并通过 jQuery(无论是否委托)附加事件侦听器。问题是我无法解开这些听众,结果他们堆积起来。这是一个示例代码,我找不到任何错误:

$(function() {
  var theTXT = '<div data-abc="tester">click here</div>';
  $("#loader").on('click', doClick);
  function doClick() {
    $("body").append(theTXT);
    $('[data-abc="tester"]').off('click', redoClick);
    $('[data-abc="tester"]').on('click', redoClick);
    function redoClick() {
      console.log("hi");
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="loader">load</div>

现在,如果我将 redoClick() 处理程序移到 doClick() 处理程序之外,一切正常。任何帮助将不胜感激,这样我就可以理解为什么 .off() 不起作用。

标签: jqueryeventsevent-handling

解决方案


好吧,傻瓜,具体问题的答案(即如何不将事件侦听器重新附加到一堆元素)非常简单。今天早上它击中了我。而不是使用

$('[data-abc="tester"]').on('click', redoClick);

我应该使用:

$('[data-abc="tester"]').last().on('click', redoClick);

做到了,不需要 off()


推荐阅读