Проверяет понимание причин, по которым обработчик события click может не вызываться, даже если в консоли нет ошибок.
Когда обработчик клика не срабатывает и при этом в консоли нет ошибок, это обычно означает, что код выполнился корректно, но либо не нашёл нужный элемент, либо событие до него не дошло. Разберём основные причины.
Если скрипт подключён в <head> без defer или обёртки в DOMContentLoaded, то document.querySelector вернёт null, и вызов addEventListener упадёт с ошибкой. Но если используется проверка или библиотека молча игнорирует отсутствие элемента, ошибки не будет.
// Плохо: скрипт в head, кнопки ещё нет
const btn = document.querySelector('#btn');
btn.addEventListener('click', () => console.log('click'));
// Хорошо: ждём DOM
document.addEventListener('DOMContentLoaded', () => {
document.querySelector('#btn')
.addEventListener('click', () => console.log('click'));
});
pointer-events: none на кнопке или родителе — клики игнорируются.z-index перекрывает кнопку.event.stopPropagation() в дочернем обработчике не даёт событию всплыть до нужного слушателя.disabled кнопка).Частая ошибка — навесить обработчик на document.querySelector('.btn'), который возвращает только первый элемент, тогда как клик происходит по другому. Или использовать getElementById с id, которого нет.
Если кнопка создана после навешивания обработчика, слушатель на ней не появится. Решение — делегирование событий:
document.addEventListener('click', (e) => {
if (e.target.matches('.dynamic-btn')) {
console.log('click on dynamic button');
}
});
Итог: если обработчик не срабатывает без ошибок, проверь момент навешивания, селектор, CSS-свойства и всплытие события. В большинстве случаев помогает делегирование или ожидание DOMContentLoaded.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию