如果我在特定 id
上发生事件,使用 e.preventDefault()
是正确还是错误?
示例:
document.getElementById("googleMap").addEventListener('touchmove', function(e) {
e.preventDefault();
var touch = e.touches[0];
if(e.touches.length == 2){
map.setOptions({draggable:true});
}
});
在这种情况下也许是错误的不是吗?因为我只有一个 id 为 googleMap
但是在这种情况下使用是正确的:
document.addEventListener('touchmove', function(e) {
e.preventDefault();
});
??
(真的对我来说不清楚何时使用e.preventDefault()
)...
请原谅我的英语,非常感谢
最佳答案
不,在 googleMap
对象上使用 e.preventDefault()
完全没问题。
事件监听器位于 DOM 元素上。无论您使用 ID、标签、类还是其他方法,如何找到 DOM 元素并不重要。
ocument.getElementById("googleMap")
返回一个 DOM 元素。一旦获得了 DOM 元素的引用,如何找到它就不再重要了。无论它是如何找到的,它都是对 DOM 元素的引用。
使用 e.preventDefault()
时必须注意的一件事是,某些事件会沿着链向上传播,如果您在链上拦截事件,则该事件可能会已经在链的下游进行了处理,从而阻止了您试图阻止的一些事情。因此,如果您希望完全控制事件发生的情况,您可能必须在最低级别捕获事件(在事件针对的原始对象处)。
e.preventDefault()
的目的是防止浏览器分配给正在发生的任何事件的默认操作。例如,单击浏览器中的链接时的默认操作是遵循该链接的 href 并加载具有该 URL 的新页面。如果您希望链接上的点击不跟随链接,而是在 Javascript 中处理点击并执行不同的操作,那么您可以调用 e.preventDefault()
。如果您不阻止默认操作,则浏览器将在事件处理程序运行后执行该事件的默认操作。
如果事件没有默认操作,或者您不想阻止默认操作,则不要调用它。一般来说,只有当浏览器正在执行某些您不希望其执行的默认操作时,您才会使用e.preventDefault()
。否则,请将其从代码中删除。如果您的代码在没有 e.preventDefault()
的情况下也能正常工作,则不要添加它,因为在这种情况下不需要它。
关于javascript - 如果事件位于元素的 id 上而不是 "generic"标签上,则使用 e.preventDefault () 是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030226/