2012-11-20 43 views
8

Vui lòng kiểm tra mã dưới đây,Hành vi của 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/

Tại sao removeEventListener không hoạt động?

Cảm ơn!

+0

Với [removeEventListener] (https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener), hai đối số là bắt buộc; chỉ đối số thứ ba là tùy chọn. – apsillers

+0

Liên quan: [Làm thế nào để loại bỏ tất cả các thính giả trong một phần tử?] (Http://stackoverflow.com/questions/9251837/how-to-remove-all-listeners-in-an-element) – apsillers

Trả lời

6

removeEventListener có 2 thông số, sự kiện và chức năng cần xóa.
này nên làm việc:

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

Ngoài ra, các chức năng bạn đang thực hiện là sản phẩm nào.

var clickfn = function(){ }; 
+1

Ok cảm ơn, tôi nghĩ rằng removeEventListener ("click") sẽ loại bỏ tất cả các chức năng bị ràng buộc với nó. –

6

Bạn phải chỉ định hàm chính xác mà bạn đã chỉ định cho addEventListener làm đối số thứ hai. Nếu bạn đã chỉ định đối số thứ ba useCapture, bạn sẽ phải chỉ định giống nhau và tương đương với removeEventListener.

Ví dụ:

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

Bạn có thể tìm thêm thông tin tại Mozilla Developer wiki.