2017-03-16 28 views
0

我有一些功能可以防止設備上的觸摸事件(在某些特定情況下)。它運行良好,直到Chrome的最後一次更新。event.preventDefault不適用於Chrome中的「document」/「document.body」元素

更新之後,試圖阻止從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

有一個change in Chrome 56

隨着這一變化touchstart和touchmove監聽器添加到文件將默認爲被動的:真正的(因此調用了preventDefault將被忽略)。

爲了再次使用它,passive屬性可以設置爲false

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

不知道是否合理強制事件處理程序不是被動的,但無論如何這可以考慮在內。

相關問題