event.preventDefault不适用于Chrome

时间:2017-03-16 11:00:31

标签: javascript google-chrome touch-event

我有一些功能可以阻止设备上的触摸事件(在某些特定情况下)。它一直运行良好,直到最后一次更新Chrome。

更新后,尝试阻止我从documentdocument.body获取的事件不再有效,但如果我从某个特定元素中侦听事件,它就会起作用。

例如:

//this not works
document.addEventListener("touchmove", function(event) {
    event.preventDefault();
});

//this one works
document.querySelector(".container").addEventListener("touchmove", function(event) {
    event.preventDefault();
});

这不是很方便的行为,因为我在body元素中有很多子节点,并且无法更改此结构。

有人知道如何让它再次运行,或者它是最新Chrome的正确行为?非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

有一个change in Chrome 56

  

通过此更改,添加到文档的touchstart和touchmove侦听器将默认为passive:true(以便将忽略对preventDefault的调用)。

要让它再次发挥作用,passive属性可以设置为false

document.addEventListener("touchmove", function(event) {
    event.preventDefault();
}, {passive: false});

不确定强制事件处理程序是否合理是不合理的,但无论如何都可以考虑这一点。