无法删除或取消绑定此document.addEventListener

时间:2014-01-28 20:41:15

标签: javascript dom javascript-events

我正在修改包含以下代码的HTML5应用,以防止在其中一个屏幕上滚动:

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

我无法在其他屏幕上滚动回来 - 我已经查看了有关removeEventListener的多个答案,并尝试过:

document.addEventListener('touchmove', function (evnt) { return true; }, false);

document.addEventListener('touchmove', function (evnt) { evnt.preventDefault(); }, true);

3 个答案:

答案 0 :(得分:0)

如果你绑定到touchmove的子元素document(可能是页面的容器,无论可能是什么),那么在该事件处理程序中执行evnt.stopPropagation(),事件将永远不会冒泡到文件中,也不会被阻止。

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

child.addEventListener('touchmove', function (evnt) { evnt.stopPropagation(); }, false);

答案 1 :(得分:0)

您无法删除或取消绑定匿名函数。 (您对touchmove事件的回调)。

但是,您可以使用引用函数的变量轻松实现所需的功能。见下文:

var callback = function (evnt) { evnt.preventDefault(); };    
document.addEventListener('touchmove', callback, false);
document.removeEventListener('touchmove', callback);

答案 2 :(得分:0)

不要使用匿名函数,而是给它起一个名字

    var blockScroll = function(evnt) {
        evnt.preventDefault();
    }

然后您可以将其添加为侦听器:

    document.addEventListener('touchmove', blockScroll);

您可以稍后将其删除为听众:

    document.removeEventListener('touchmove', blockScroll);