Как можно повесить событие на узел с помощью 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 устарел. Для многих потомков — делегирование на родителе через всплытие.