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

时间:2016-09-15 07:08:26

标签: javascript events event-handling listener

我有这段代码:

    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函数的语法以及如何将它应用于我的示例。我已经读过它在监听器中不能使用匿名函数,所以我必须首先声明函数,是吗?

感谢您的帮助。

2 个答案:

答案 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可以是一个事件,例如eventclick指的是到函数对象。