为什么我不能使用 off() 删除事件侦听器?

Why can't I remove event listeners using off()?

我正在尝试从 DOM 中动态删除一个事件。为此,我正在使用 Chrome(版本 79)开发工具,第 https://www.omgubuntu.co.uk/category/news?utm_source=menu

在“元素”选项卡中,我转到“事件侦听器”并查找 'load' 事件,我在 Window 元素上找到了 3 个事件。所以在控制台中,我输入:

$(window).off('load');

命令执行没有错误,但似乎没有任何变化,即使我在事件部分按下刷新按钮也是如此。我希望 Window 的所有 'load' 事件都消失。

我在许多其他网站上也遇到同样的问题,但在我的本地网页上运行良好(这就是我知道我使用 JQuery 的正确方式)...

.off() 仅删除通过 .on() 方法添加的事件,因此不会影响使用其他 API 添加的任何事件。

现在,当你说 即使我在事件部分按下刷新按钮。我希望 Window 的所有 'load' 事件都消失。,您误解了页面处理方式的性质。如果您刷新页面,它的所有代码都会再次处理,因此即使您成功删除了控制台中的处理程序,它们也会全部返回,因为页面重新开始。

了解您在控制台中的操作只会影响浏览器中加载的页面的当前实例。

要删除现有侦听器,请使用 getEventListeners 命令行 API:

getEventListeners(window).load.forEach(x=>window.removeEventListener('load',x.listener))

或者只需单击元素 Event listeners 面板中的 Remove 按钮: