Javascript removeEventListener 不起作用 - 事件侦听器仍然存在

Jos*_*dge 3 javascript events event-listener

我已经研究了一些解决这个问题的方法,但我不能真正告诉,我的代码是:

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);
} 
Run Code Online (Sandbox Code Playgroud)

删除代码不起作用,还没有尝试很多解决方案,但这是我脚本上的最后一件事,我只想完成它。

谢谢你们

Arn*_*anc 5

调用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);
}
Run Code Online (Sandbox Code Playgroud)

得益于其命名空间事件功能,jQuery 可以更轻松地处理此问题:

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

// later

$(lb).off('keyup.my_namespace');
Run Code Online (Sandbox Code Playgroud)