JS .preventDefault не работает

0

когда я использую.preventDefault для ссылки, которая по-прежнему идет на ссылку - также это даже возможно с JS или это только метод jquery?

var avoidlink = getElementsByTagName("a");

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


<a href="http://www.google.com">Click here</a>
Теги:
preventdefault

2 ответа

2
Лучший ответ

Три проблемы:

  • 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);
  }
}

демонстрация

Модификация прототипа объектов, которые вы не являетесь владельцами, обычно неодобрительно, но это изменение довольно безобидное и естественное.

0

Обычно, если многим элементам нужен один и тот же прослушиватель событий, вы можете добавить прослушиватель событий в контейнер и отфильтровать, с каким элементом вы хотели бы действовать:

document.addEventListener("click",function(e){
  if(e.target,e.target.tagName.toLowerCase()==="a"){
    e.preventDefault();
  }
});

Если вы добавили лишние теги привязки через скрипт, они также вызовут preventDefault.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню