2016-09-15 4 views
1

는이 코드를 가지고 :자바에서 이벤트 리스너를 제거하려면 어떻게해야합니까?

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은 function 객체를 참조합니다.

+0

나를 도와주는 첫 번째 진짜 대답에 감사드립니다. 먼저 함수를 정의하려고합니다. 제 예제에서 "엘"이 무엇인지 말해 줄 수 있습니까? "창"입니까? –

+0

예, 귀하의 예에서 '엘'은 '창'을 의미합니다. – 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

나는 이것을 이미 읽었으며 "target", "type"및 "listener"매개 변수에 대해 추가해야하는 값을 얻지 못합니다. –

+0

Sry, 이벤트에서 익명 기능을 제거 할 수 없으며 다른 솔루션을 테스트 할 수 있습니다. 내 게시물을 편집했습니다. 좋은 하루 되세요. – Liberateur

관련 문제