2012-11-20 12 views
8

Proszę sprawdzić poniższy kod,Zachowanie removeEventListener

var clickfn = function(){ 
alert("clicked");      
} 
document.getElementById("div1").addEventListener("click",clickfn,true); 
clickfn = function(){ }; 
document.getElementById("div1").removeEventListener("click"); 

http://jsfiddle.net/qUtzL/4/

Dlaczego removeEventListener nie działa?

Dzięki!

+0

W przypadku [removeEventListener] (https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener) wymagane są dwa argumenty; tylko trzeci argument jest opcjonalny. – apsillers

+0

Powiązane: [Jak usunąć wszystkich odbiorców w elemencie?] (Http://stackoverflow.com/questions/9251837/how-to-remove-all-listeners-in-an-element) – apsillers

Odpowiedz

6

removeEventListener przyjmuje 2 parametry, wydarzenie i funkcję do usunięcia.
To powinno działać:

document.getElementById("div1").removeEventListener("click", clickfn); 

Również funkcja jesteś wykonujący nie jest pusta.

var clickfn = function(){ }; 
+1

Ok, dzięki, pomyślałem removeEventListener ("kliknięcie") usunie całą powiązaną z nim funkcję.Myślnie –

6

Musisz podać dokładną funkcję, którą określiłeś jako addEventListener jako drugi argument. Jeśli podałeś trzeci argument useCapture, będziesz musiał podać to samo i odpowiednik removeEventListener.

Na przykład:

function myFunc(event){ alert(event.target.textContent); } 

var myElement=document.getElementById('myElement'); 

//Add EventListener 
myElement.addEventListener('click', myFunc, false); 

/* ... */ 

//Remove EventListener 
myElement.removeEventListener('click', myFunc, false); 

View an example at jsFiddle

można znaleźć więcej informacji na Mozilla Developer wiki.