我正在尝试存储侦听器函数,以便以后可以将其删除。我正在使用包装器添加侦听器。问题是没有删除侦听器。这是为什么?
下面是一些代码:
classMyClass{
// add the wrapper to event listener
init(){
window.app.addEventListener = function(type, fn, opt){
obj.listeners.push({type: type, fn: fn, opt: opt});
console.log('addEvent ', l);
var l = obj.listeners[obj.listeners.length-1];
console.log(l);
window.addEventListener(l.type, l.fn, l.opt);
//window.removeEventListener(l.type, l.fn, l.opt);
};
}
removeListeners(){
let obj = this;
this.listeners.forEach(function() {
var l = obj.listeners[obj.listeners.length-1];
console.log('remove ', l);
// remove the listener
window.removeEventListener(l.type, l.fn, l.opt);
obj.listeners.pop();
});
}
答案 0 :(得分:0)
必须使用命名函数注册事件处理程序。
如果确实需要,可以尝试如下操作:
var eventListener = (function()
function eventCallback() { ... /* whatever that needs to be done for an event */ ... }
return {
activate: function() {
addEventListener(/* add the type of event */, eventCallback);
console.log("event listener added."); //if you want this here
},
deactivate: function() {
removeEventListener(eventCallback); //removes the event
console.log("event listener removed."); //if you want this here
},
}
)();
然后,您可以使用eventListener.activate()
启用监听器,并使用eventListener.deactivate()
禁用监听器。请记住,此解决方案仅适用于一个事件。
如果要存储要存储的多个事件函数,则可以执行eventListener
的数组。
这里的主要目的是命名函数,因此您以后可以参考它们以删除事件侦听器。