@koxac

Как лучше вешать событие onclick?

Нужно при нажатии на любой элемент с определенным классом выполнить функцию, вижу 2 способа, но какой из них лучше?

window.addEventListener('click', function(evt) {
  if (evt.target.classList.contains('onClick'))
    console.log(evt.target);
});


или
document.querySelectorAll('.onClick').forEach(function(target) {
  target.addEventListener('click', function(evt) {
    console.log(evt.target);
  });
});
  • Вопрос задан
  • 585 просмотров
Решения вопроса 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
  1. Здесь вы вешаете один обработчик на весь документ. И отслеживаете вообще любой клик, проверяя на какой элемент было нажание. Важно отметить, что например вот это
    <button class="onClick"><span>CLICK</span></button>
    не сработает, так как фактически клик произошел не на кнопке, а на вложенном в него спане. Этот способ подходит, когда у вас очень много элементов onClick на странице, чтобы не вешать 1000 обработчиков, а только 1, или они постоянно динамически подгружаются.

  2. Здесь вы навешиваете по 1 обработчику на каждый элемент. В target всегда будет именно тот элемент на который вы повесили обработчик. Но если элементы onClick динамически подгружаются то для них снова нужно вешать обработчик. Рекоментуется использовать во всех случаях за исключением описанных в пункте №1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы