2013-05-20 62 views
3

我看這周圍的一些方法,但我真的不能告訴,我的代碼是:的Javascript removeEventListener不工作 - 事件偵聽器仍然

lb = document.body; 

if(lb.addEventListener){  
    lb.addEventListener('keyup', 
    function(event){ 
     keyPress(event.keyCode) 
    }, false); 
} 

//In another function. 

if(document.body.removeEventListener){ 
    document.body.removeEventListener('keyup', function(event){event.keyCode}, false); 
} 

刪除代碼不工作,避風港」 t嘗試了很多解決方案,但它是我腳本中的最後一件事,我只是想完成它。

謝謝大家

+0

你不需要'false'參數 – karthikr

+0

2問題:1.您應該刪除SAME函數(引用它),而不是另一個看起來相同的函數; 2. addEvenListener和removeEventlistener必須附加到同一個對象。我剛剛發現'document.addEventListener'不能用'window.removeEventListener' – anneb

回答

4

當調用removeEventListener,你必須給它相同的功能情況比對addEventListener:

var lb = document.body; 

var callback = function(event){ 
    keyPress(event.keyCode) 
}; 

if(lb.addEventListener){  
    lb.addEventListener('keyup', callback, false); 
} 

//In another function. 

if(document.body.removeEventListener){ 
    document.body.removeEventListener('keyup', callback, false); 
} 

jQuery的可以更容易地解決這個問題,由於其namespaced events feature

$(lb).on('keyup.my_namespace', function() { ... }) 

// later 

$(lb).off('keyup.my_namespace'); 
1

你不能用removeEventListener刪除一個匿名函數,我請使用函數名稱。 如:

if(lb.addEventListener){  
    lb.addEventListener('keyup', myFunction, false); 
} 

//In another function. 

if(document.body.removeEventListener){ 
    document.body.removeEventListener('keyup', myFunction, false); 
} 

新功能:

function myFunction(e){ 
    var keyCode = e.keyCode; 

} 
1

移除偵聽器時您需要的處理函數,以便以後引用它:

lb.addEventListener('keyup', 
function keyup(event){ // assigns the handler to "keyup" 
    keyPress(event.keyCode) 
}, false); 

document.body.removeEventListener('keyup', keyup, false); 
+0

刪除,這在幾乎所有瀏覽器中都會生成一個Uncaught ReferenceError ... –