javascript - JS .preventDefault 不起作用

标签 javascript html preventdefault

当我在链接上使用 .preventDefault 时,它仍然会转到该链接 - 这是否可以通过 JS 实现,还是仅使用 jquery 方法?

var avoidlink = getElementsByTagName("a");

avoidlink.addEventListner("click",function(evt){
evt.preventDefault();
},false);


<a href="http://www.google.com">Click here</a>

最佳答案

三个问题:

  • getElementsByTagName 必须在文档或元素上调用
  • 您无法直接在 getElementsByTagName 返回的节点列表上添加事件监听器,您必须迭代它包含的元素:
  • 您在 addEventListener 中有拼写错误

这是一个固定代码:

var avoidlink = document.getElementsByTagName("a");
for (var i=0; i<avoidlink.length; i++) {
  avoidlink[i].addEventListener("click",function(evt){
  evt.preventDefault();
  },false);
}
<小时/>

如果您希望能够将事件监听器附加到节点列表,您可以丰富NodeList.prototype:

NodeList.prototype.addEventListener = function(){
  for (var i=0; i<this.length; i++) {
      Element.prototype.addEventListener.apply(this[i] , arguments);
  }
}

Demonstration

修改不属于您的对象的原型(prototype)通常会受到反对,但这种更改相当无害且自然。

关于javascript - JS .preventDefault 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19875222/

相关文章:

javascript - 将 Jquery 添加到 AMP 页面

javascript - 在主干js中访问返回值

javascript - 在同一页面打开 HTML 表单

javascript - 结合 jQuery PreventDefault 和所需的表单输入

Angular2 EventEmitter 和 preventDefault()

javascript - Highcharts 部分渲染

javascript - 如何在多级继承中调用基类构造函数?

javascript - 如何使用 Jquery 防止 Sub Div 的不透明度

jquery - 照片库 - 动态确定图像的宽度/高度以最大化 View

javascript - 如何防止 Angular JS 中的确认对话框出现默认值