javascript - 如何在 Javascript 中删除事件侦听器?
问题描述
我正在尝试在我的脚本中实现延迟滚动,它一直运行良好,直到它到达末尾,我想阻止它发出额外的请求。
我使用以下方法向我的代码中添加了一个事件侦听器:
window.addEventListener("scroll", _.throttle(checkScroll, 500));
但是,当我尝试删除它时,它似乎仍然在继续监听并处理该事件。
我试过了:
if (json.articles.length == 0) {
$(".articles").append("<br>That's all folks!");
window.removeEventListener("scroll", _.throttle(checkScroll, 500));
}
和
if (json.articles.length == 0) {
$(".articles").append("<br>That's all folks!");
window.off("scroll");
}
但似乎都没有工作。
解决方案
如果您使用纯 Javascript 添加事件侦听器,则删除它的唯一方法是保存对_.throttle
您传递给的调用结果的引用addEventListener
:
const handler = _.throttle(checkScroll, 500);
window.addEventListener("scroll", handler);
// ...
window.removeEventListener("scroll", handler);
window.off('scroll')
如果您还使用 jQuery 添加处理程序(例如$(window).on(...)
,然后$(window).off(...)
) ,您只能做类似的事情。如果您使用 Javascript 添加处理程序,则 jQueryoff
将无法使用。
推荐阅读
- linux - 无法连接到 docker 容器外的 oracle:12.1.0.2
- java - 如何一起使用底部导航栏和侧边导航栏,我的侧边导航按钮不显示时我但底部导航
- suitescript - 通过脚本在采购订单中设置 GST 代码/税码的问题
- datetime - Teradata - 将 'yyyy-mm-dd' 转换为 YYYY-MM
- java - 在同一个 Spring Boot 应用程序中进行 REST 模板调用和 Web 客户端调用
- regex - 如何在 Watson 中使用 getMatch 获取两个字符串之间的文本
- reactjs - Laravel React 身份验证
- javascript - 如何从对象数组中找到所有 id 到数组中 - Javascript
- forms - 角度 8 反应形式未出现错误验证消息
- angular - 用于 Angular CLI 构建/服务/测试命令的 VS Code 任务问题匹配器