首页 > 解决方案 > 如何在 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");
}

但似乎都没有工作。

标签: javascriptjqueryjsonscrollevent-listener

解决方案


如果您使用纯 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将无法使用。


推荐阅读