Javascript событие для всех ссылок

178
08 октября 2018, 22:50

Как заменить jquery код на javascript?

$(document).on('click', 'a', function (event) {
  event.preventDefault();
});

Суть в том, что нужно повесить событие на все ссылки, не используя jQuery. Ссылки могут появляться новые после ajax. Они тоже должны обрабатывать событие.

Я пробовал:

 document.addEventListener('click', function (event) {
    var link = event.target.closest('a');
    if (!link) return;
    event.preventDefault();
}, false);

Но closest плохо поддерживается браузерами без полифилов =( Так же пробовал через event.path найти дочерний элемент A, но e.path не работает в сафари...

Может подскажете какой то способо реализовать эту идею именно через document.addEventListener, без доп функций и тд.

(closest и event.path нужны были для того, чтобы избежать нерабочих картинок в ссылка и тд, так как event.target будет img, а не A)

Answer 1
document.addEventListener('click',function(e){
    let current = e.target;
    while(current != document.body){
        if(current.tagName == 'A'){
            e.preventDefault();
            break;
        }
        else current = current.parentNode;
    }
});
Answer 2

Добавляешь каждой ссылке class="needToClick" После чего

var arr = []; 
arr = document.getElementsbyclassname('needToClick');

Затем через forEach() просто навешиваешь события которые тебе необходимы.

READ ALSO
Нужна помощь по Redux

Нужна помощь по Redux

Вот есть допустим начальный state

158
Почему значение undefined?

Почему значение undefined?

После всех элементов в html файле располагаю скриптВ объекте page есть объект obj со значением $("

194
Не инкрементируется значение i

Не инкрементируется значение i

Возник вопрос в коде, а именно не инкрементируется значение this_i

180
Vue.js отслеживание клика вне элемента

Vue.js отслеживание клика вне элемента

Есть следующая разметка:

464