Kozack
@Kozack
Thinking about a11y

Как назначить обработчик событий на множество элементов на странице?

На странице может быть до нескольких тысяч кнопок. По клику на каждую из них мне нужно запускать один и тот же обработчик. Как лучше добавить его на чистом js, чтобы не перенапрягать браузер?

Я сделал вот так, просто регистрируем обработчик для каждой кнопки:
document.querySelectorAll('button.action').forEach(el => {
		el.addEventListener('click', handler)
})


Но, может есть способ получше?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
один обработчик на весь документ, слушает все клики и проверяет не попали ли они по кнопке.
document.addEventListener('click', evt => {
  if (evt.target.matches('button.action, button.action *')) {
     console.log('target', evt.target)
     let button = evt.target.closest('button')
     console.log('button', button)
  }
})


Ответ написан
Kozack
@Kozack Автор вопроса, куратор тега JavaScript
Thinking about a11y
Немного доработанный ответ Stalker_RED (Обработчик срабатывает при клике по целевому элементу и по любому вложенному
document.addEventListener('click', async function (event) {
	if (!event.target.matches('button.action, button.action *')) {
		return;
	}
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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