Обработка событий в JavaScript
В этом уроке мы рассмотрим, как работать с событиями в JavaScript. События позволяют вашим веб-приложениям реагировать на действия пользователя, такие как нажатия кнопок, ввод текста и многое другое.
1. Назначение обработчиков событий
Обработчики событий могут быть назначены несколькими способами. Рассмотрим два основных.
1.1. Использование атрибутов HTML
Вы можете назначить обработчик события непосредственно в HTML-коде:
<button type="button" onclick="alert('Button clicked!')">Click me</button>Это простой способ, но не рекомендуется для больших проектов из-за плохой читабельности и поддержки.
1.2. Использование метода addEventListener
Метод addEventListener предоставляет более гибкий и современный способ назначения обработчиков событий:
const button = document.querySelector('button');
button.addEventListener('click', function() {
alert('Button clicked!');
});События бывают разных типов. Вот некоторые из них:
- События мыши:
click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout - События клавиатуры:
keydown,keypress,keyup - События формы:
submit,change,focus,blur - События документа:
DOMContentLoaded,load,unload,resize,scroll - События касания:
touchstart,touchmove,touchend
3. Использование объекта события
Когда происходит событие, создается объект события, который передается в обработчик. Он содержит информацию о событии:
button.addEventListener('click', function(event) {
console.log(event.type); // 'click'
console.log(event.target); // элемент, на который было нажато
});4. Всплытие и перехват событий
События могут распространяться по DOM-дереву двумя способами:
- Всплытие (bubbling): Событие обрабатывается сначала самым внутренним элементом и поднимается вверх к родительским элементам.
- Перехват (capturing): Событие обрабатывается сначала самыми внешними элементами и идет вниз к целевому элементу.
const parent = document.querySelector('.parent');
const child = document.querySelector('.child');
parent.addEventListener('click', function() {
console.log('Parent clicked');
}, true); // true означает использовать перехват
child.addEventListener('click', function() {
console.log('Child clicked');
});5. Остановка распространения и отмена действия по умолчанию
5.1. Остановка распространения события
Чтобы предотвратить дальнейшее распространение события, используйте event.stopPropagation():
child.addEventListener('click', function(event) {
event.stopPropagation();
console.log('Child clicked');
});5.2. Отмена действия по умолчанию
Чтобы отменить действие по умолчанию браузера (например, переход по ссылке), используйте event.preventDefault():
const link = document.querySelector('a');
link.addEventListener('click', function(event) {
event.preventDefault();
console.log('Link click prevented');
});Пример объединения всех техник
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="parent">
<button type="button" class="child">Click me</button>
</div>
<script>
const parent = document.querySelector('.parent');
const button = document.querySelector('.child');
parent.addEventListener('click', function() {
console.log('Parent clicked');
}, true); // Используем перехват
button.addEventListener('click', function(event) {
event.stopPropagation(); // Останавливаем всплытие
console.log('Button clicked');
});
</script>
</body>
</html>В нашем телеграмм канале вы можете предложить тему для следующего мини урока