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

时间:2018-12-27 07:22:59

标签: 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");
}

但似乎都不起作用。

2 个答案:

答案 0 :(得分:3)

如果使用纯Javascript添加事件监听器,则删除事件监听器的唯一方法是保存对传递给_.throttle的调用addEventListener的结果的引用:

const handler = _.throttle(checkScroll, 500);
window.addEventListener("scroll", handler);
// ...
window.removeEventListener("scroll", handler);

如果您还使用jQuery添加处理程序(例如,window.off('scroll'),然后是$(window).on(...)),则只能执行类似$(window).off(...)的操作。如果您使用Javascript添加处理程序,则jQuery的off将无法使用。

答案 1 :(得分:1)

您可以使用on在jQuery中添加事件处理程序,并使用off将其删除。 Here's a fiddle进行说明。

$(window).on('scroll', function(ev) { //add handler
    ...
})

$(window).off('scroll', function(ev) { //remove handler
    ...
})