2013-05-20 61 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 ... –