jquery - 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() 不起作用。
解决方案
好吧,傻瓜,具体问题的答案(即如何不将事件侦听器重新附加到一堆元素)非常简单。今天早上它击中了我。而不是使用
$('[data-abc="tester"]').on('click', redoClick);
我应该使用:
$('[data-abc="tester"]').last().on('click', redoClick);
做到了,不需要 off()
推荐阅读
- javascript - 使用 MSAL.js 的 Vanilla JS 单点登录尝试导致弹出窗口显示同一页面的副本
- sql - Laravel/Ajax/SQL:尝试在是否为空时显示当前值
- docker - 哪些因素会影响一台机器上同时处理不同的容器?
- git - git push origin 什么都不做
- excel - 如何使用级别值自动嵌套 Excel 电子表格的行?
- typescript - 是否可以在 TypeScript 中解构类型定义?
- r - 如何在绘图前不过滤数据的情况下在 ggplot2 中绘制 plot_model x 轴项的子集?
- r - 在 reshape 后使用 pivot_wider() 将第一列分成两列
- python - 如何使用 api.add_resource 在不同的文件中路由?
- corestore - 获取对象时的 CoreStore Xcode 数据错误问题