我有这段代码:
chrome.tabs.onUpdated.addListener(function(callback){
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {//script});
});
我希望在触发后删除第二个侦听器(按时间顺序,第一个侦听器首先触发,然后第二个触发器在获取消息时触发)。
我真的不明白.removeEventListener函数的语法以及如何将它应用于我的示例。我已经读过它在监听器中不能使用匿名函数,所以我必须首先声明函数,是吗?
感谢您的帮助。
答案 0 :(得分:2)
target.removeEventListener(type, listener[, options]);
参考: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
编辑:
var handler;
chrome.tabs.onUpdated.addListener(function(callback)
{
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
handler = function(e)
{
// Script
};
eventer(messageEvent, handler);
});
var cond = window.addEventListener;
window[cond ? 'removeEventListener' : 'detachEvent'](cond ? 'message' : 'onmessage', handler);
答案 1 :(得分:1)
这有点棘手,但请耐心等待。以下是添加事件监听器的方法:
el.addEventListener("event", function () {
// code
});
removeEventListener
的签名几乎相同,但这里有一个问题:您需要传递一个变量,该变量引用您传递给{{的函数1}}。传递匿名函数并没有帮助(因为您以后无法再参考它)。因此,在您的情况下,您必须改为传递命名函数:
addEventListener
要删除它,请将其传递给function eventHandler (e) { /* handle e */ }
el.addEventListener("event", eventHandler);
:
removeEventListener
el.removeEventListener("event", eventHandler);
是您要添加监听器的元素,el
可以是一个事件,例如event
,click
指的是到函数对象。