Задать вопрос
Kozack
@Kozack
Thinking about a11y

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

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

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


Но, может есть способ получше?
  • Вопрос задан
  • 185 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 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;
	}
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы