删除javascript事件监听器

删除javascript事件监听器,javascript,event-listener,Javascript,Event Listener,我有以下javascript需要在某个时候激活 document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); 但是,当我执行此操作时,移除事件侦听器时遇到问题 document.removeEventListener('touchmove', function (e) { e.preventDefault(); }, false); removeEventListener函数似乎不起作

我有以下javascript需要在某个时候激活

document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
但是,当我执行此操作时,移除事件侦听器时遇到问题

document.removeEventListener('touchmove', function (e) { e.preventDefault(); }, false);

removeEventListener函数似乎不起作用。我对类似的案例做了一点搜索,不幸的是我找不到解决方案。非常感谢您的帮助。

您正在向addEventListener调用发送一个匿名函数。改为使用命名函数并将其发送到removeEventListener,如下所示:

function handleTouchMove(e) {
  e.preventDefault();
}
document.addEventListener('touchmove', handleTouchMove, false);

document.removeEventListener('touchmove', handleTouchMove);
function handleTouch(e) {
    e.preventDefault();
}

document.addEventListener('touchmove', handleTouch, false);

document.removeEventListener('touchmove', handleTouch, false);

否则,按照您的操作方式,发送给removeEventListener的函数是一个完全不同的函数,即使它具有相同的内容。

您必须像这样传递实际相同的函数引用:

function handleTouchMove(e) {
  e.preventDefault();
}
document.addEventListener('touchmove', handleTouchMove, false);

document.removeEventListener('touchmove', handleTouchMove);
function handleTouch(e) {
    e.preventDefault();
}

document.addEventListener('touchmove', handleTouch, false);

document.removeEventListener('touchmove', handleTouch, false);

您不能使用其他匿名函数的第二个副本,即使其中包含相同的代码。

进一步阅读正确用法:哇。谢谢霍华德的解释。我现在明白了。也感谢adreas的文章链接