когда я использую.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);
}
}
Модификация прототипа объектов, которые вы не являетесь владельцами, обычно неодобрительно, но это изменение довольно безобидное и естественное.
Обычно, если многим элементам нужен один и тот же прослушиватель событий, вы можете добавить прослушиватель событий в контейнер и отфильтровать, с каким элементом вы хотели бы действовать:
document.addEventListener("click",function(e){
if(e.target,e.target.tagName.toLowerCase()==="a"){
e.preventDefault();
}
});
Если вы добавили лишние теги привязки через скрипт, они также вызовут preventDefault.