2016-09-15 109 views
1

我有這樣的代碼:如何刪除javascript中的事件監聽器?

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

Google對此有很多結果 –

+1

[JavaScript:remove event listener]的可能重複(http://stackoverflow.com/questions/4402287/javascript-remove-event-listener) –

回答

1

這是一個有點棘手,但我承擔。這裏是你如何添加一個事件偵聽器:

el.addEventListener("event", function() { 
    // code 
}); 

removeEventListener的簽名幾乎是一樣的,但這裏的漁獲:你需要傳遞指的是你傳遞給addEventListener函數的變量。傳遞一個匿名函數並沒有幫助(因爲你以後無法再引用它)。所以,你的情況,你必須通過一個名爲函數:

function eventHandler (e) { /* handle e */ } 
el.addEventListener("event", eventHandler); 

刪除它,把它傳遞給removeEventListener

el.removeEventListener("event", eventHandler); 

el是您要添加的元素聽者,該event可以是一個事件,像click例如,和eventHandler指功能對象。

+0

謝謝你的第一個真正的答案,幫助我。我將嘗試首先定義函數。你能告訴我,在我的例子中有什麼「el」?它是「窗口」嗎? –

+0

是的,在你的例子中,'el'指的是'window'。 – Daemonk

+0

此外,'attachEvent'僅適用於IE8及更高版本。所以,除非你支持他們,否則沒有理由使用它。 – Daemonk

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); 
+0

請記住,您必須通過在正確的函數的引用以及 – evolutionxbox

+0

我已經看過這個,我不明白什麼樣的價值觀我要補充的「目標」,「類型」和「聽衆」的參數。 –

+0

Sry,你不能刪除匿名功能,你可以測試我的其他解決方案,我已經編輯了我的帖子。祝你一天愉快。 – Liberateur