我想删除使用addEventListener()添加的所有特定类型的事件侦听器。我所看到的所有资源都在告诉你需要这样做:
elem.addEventListener('mousedown',specific_function);
elem.removeEventListener('mousedown',specific_function);
但我希望能够在不知道它目前是什么情况下清除它,就像这样:
elem.addEventListener('mousedown',specific_function);
elem.removeEventListener('mousedown');
在不知道哪个回调附加到窗口监听器的极端情况下,处理程序可以包装窗口addEventListener,变量可以存储监听器,以通过removeAllEventListener('scroll')正确删除每个监听器。
var listeners = {};
var originalEventListener = window.addEventListener;
window.addEventListener = function(type, fn, options) {
if (!listeners[type])
listeners[type] = [];
listeners[type].push(fn);
return originalEventListener(type, fn, options);
}
var removeAllEventListener = function(type) {
if (!listeners[type] || !listeners[type].length)
return;
for (let i = 0; i < listeners[type].length; i++)
window.removeEventListener(type, listeners[type][i]);
}