Как повесить EventListener на все элементы в коллекции?

На странице генерируется n-ое кол-во кнопок с одинаковым классом. Мне нужно на все эти кнопки повесить EventListener. Пытался делать так:
var buttons = document.getElementsByClassName('buttons');
var button;
for(var i=0; i<buttons.length; i++){
        button = buttons[i]
        button.addEventListener('click', some_function)
    }

Но ивент навешивается только на последний элемент коллекции.
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
l3ftoverz
@l3ftoverz Куратор тега JavaScript
Туды сюды
document.querySelectorAll('.buttons')
  .forEach(button => button.addEventListener('click', function (e) {
    // ...
  }))


Или, как уже показали выше - можно делегировать событие на родителя.
Ответ написан
hzzzzl
@hzzzzl
document.body.addEventListener('click', (event) => {
  if (event.target.matches('.buttons')) {
    some_function(event)
  }
})


но если хочется циклом, то var поменять на let должно хватить

for(let i=0; i<buttons.length; i++){
        button = buttons[i]
        button.addEventListener('click', some_function)
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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