javascript - 如果事件位于元素的 id 上而不是 "generic"标签上,则使用 e.preventDefault () 是否错误?

标签 javascript preventdefault

如果我在特定 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/

相关文章:

javascript - jQueryUI 模式关闭时刷新页面

javascript - 满足条件时无法阻止表格

javascript - 转换JQuery Datepicker的日期格式

javascript - 向 RGB 颜色混合算法添加额外的十六进制颜色

Javascript:Firefox 中复选框+标签+preventDefault 的问题

javascript - 新调用时不重置默认操作

jquery - PreventDefault 在第二次单击时不起作用

javascript - 使用 Javascript 将 xml 加载到类

javascript - 如何从 jquery 数据表中获取单行数据?

javascript - jQuery 使单选按钮不可点击