javascript - 如何在 Javascript 中删除事件监听器?

标签 javascript jquery json scroll event-listener

我正在尝试在我的脚本中实现延迟滚动,它运行良好,直到到达末尾,我想阻止它发出额外的请求。

我使用以下方法将事件监听器添加到我的代码中:

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 添加处理程序,则 jQuery 的 off将无法使用。

关于javascript - 如何在 Javascript 中删除事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53941274/

相关文章:

javascript - 将 php 变量传递给外部 javascript 文件

javascript - 同时打开两个jquery日期选择器

android - 发送 base64 编码的图像会导致图像损坏

json - 管道后的 '@-'在PowerShell中是什么意思?

python - { "error": "inputs is a plain value/list, but expecting an object as multiple input tensors required as per tensorinfo_map" }

javascript - Angular setPristine 不起作用

javascript - 为什么 jQuery .on( 'click' , foo ) 在页面加载时而不是在单击时运行该函数?

javascript - AngularJS 路由取消——为什么我需要使用 $rootScope?

javascript - 对预检请求的响应未通过访问控制检查 Laravel 和 Ajax 调用

jquery - 获取多个输入类型隐藏值行按钮单击表中的列