PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Как можно повесить событие на узел с помощью JS?

DOM и браузер

Событие на узел вешают через `addEventListener` (основной способ) или свойство `on (onclick`). Также — делегированием на родителе.**

addEventListener (основной)

const node = document.querySelector('.btn');
node.addEventListener('click', handler, options);
  • Несколько обработчиков, опции (capture, once, passive), снятие через removeEventListener.
node.addEventListener('click', () => console.log('клик'));
node.addEventListener('mouseenter', handler);
node.addEventListener('keydown', handler, { once: true });

Свойство on*

node.onclick = handler;
node.onmouseover = handler;
  • Только один обработчик (перезаписывается при повторном присваивании).

Инлайн-атрибут (устаревший)

<button onclick="handler()">Кнопка</button>

Не рекомендуется (смешивает разметку и логику).

Делегирование

Один обработчик на родителе для многих потомков (через всплытие):

list.addEventListener('click', (e) => {
  if (e.target.matches('li')) { /* обработка */ }
});

Снятие обработчика

node.removeEventListener('click', handler); // нужна та же ссылка на функцию

Опции addEventListener

  • once: true — один раз.
  • capture: true — фаза погружения.
  • passive: true — не блокировать scroll/touch.

Коротко для собеседования

Событие на узел вешают через node.addEventListener('click', handler, options) (основной — несколько обработчиков, опции capture/once/passive, снятие removeEventListener) или свойство node.onclick = handler (один обработчик). Инлайн onclick устарел. Для многих потомков — делегирование на родителе через всплытие.

Другие вопросы раздела