我已经看了几个方法,但我无法说清楚,我的代码是:
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);
}
删除代码无效,尚未尝试过大量解决方案,但它是我脚本上的最后一件事,我只想完成它。
谢谢大家
答案 0 :(得分: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可以更轻松地处理这个问题
$(lb).on('keyup.my_namespace', function () { ... })
// later
$(lb).off('keyup.my_namespace');
答案 1 :(得分:1)
您无法使用removeEventListener删除匿名函数,而是使用函数名称。 e.g:
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;
}
答案 2 :(得分:1)
您需要命名处理程序函数,以便以后在删除侦听器时引用它:
lb.addEventListener('keyup',
function keyup(event){ // assigns the handler to "keyup"
keyPress(event.keyCode)
}, false);
document.body.removeEventListener('keyup', keyup, false);