Содержание
  1. Отмена события
  2. Всплытие событий
  3. Остановка всплытия событий
  4. Использование отмены и всплытия вместе
  5. Заключение
СправочникОбновлено · 06.2026

Отмена и всплытие событий в JavaScript и HTML

10 октября 2023 · 3 минуты чтения

В веб-разработке события играют важную роль. От кликов мыши до отправки форм, события позволяют взаимодействовать с веб-страницей. Для обработки событий в JavaScript используются методы и свойства, но также существует два важных концепта: отмена (cancellation) и всплытие (bubbling) событий. В данной статье мы подробно рассмотрим эти концепции, их влияние на обработку событий и приведем практические примеры.

Отмена события

Отмена события (event cancellation) – это механизм предотвращения действия при клике. Это достигается с помощью метода `preventDefault()` объекта события (Event).

Пример:

JS14 строк

// HTML

<a href="https://www.example.com" id="link">Ссылка</a>

// JavaScript

document.getElementById("link").addEventListener("click", function(event) {

event.preventDefault(); // Отменяем переход по ссылке

alert("Ссылка была нажата, но переход отменен.");

});

`preventDefault()` здесь отменяет переход по ссылке.

Всплытие событий

Всплытие событий (event bubbling) – это когда событие поднимается снизу вверх в иерархии DOM (Document Object Model). Этот процесс продолжается до тех пор, пока не достигнет корневого элемента документа.

Пример:

HTML6 строк

<div id="parent">

<button id="child">Нажми меня</button>

</div>

JS12 строк

document.getElementById("parent").addEventListener("click", function() {

alert("Родительский элемент");

});

document.getElementById("child").addEventListener("click", function() {

alert("Дочерний");

});

При клике на кнопку «Нажми меня» обработчик вызывается сначала на дочернем, а потом на родительском элементе.

Остановка всплытия событий

Иногда требуется остановить всплытие на определенном этапе. Для этого можно использовать метод `stopPropagation()` объекта. Этот метод предотвращает дальнейшее всплытие после вызова.

Пример:

JS8 строк

document.getElementById("child").addEventListener("click", function(event) {

event.stopPropagation(); // Останавливаем всплытие

alert("Событие на дочернем элементе");

});

В данном примере при клике на кнопку «Нажми меня» событие не будет всплывать до родительского элемента благодаря `stopPropagation()`.

Использование отмены и всплытия вместе

Одновременно они могут использоваться вместе для более сложной логики обработки событий. Например, вы можете отменить стандартное действие и затем явно вызвать всплытие для других обработчиков.

Пример:

HTML2 строки

<button id="myButton">Нажми меня</button>

JS18 строк

document.getElementById("myButton").addEventListener("click", function(event) {

event.preventDefault(); // Отменяем стандартное действие

alert("Действие кнопки было отменено");

// Явно вызываем всплытие

event.target.dispatchEvent(new Event("customclick", { bubbles: true }));

});

document.body.addEventListener("customclick", function() {

alert("Событие на body после отмены");

});

В этом примере мы отменяем стандартное действие клика по кнопке и затем явно вызываем всплытие события «customclick». Это событие будет всплывать до корневого элемента документа, и на body сработает соответствующий обработчик.

Заключение

Понимание механизмов отмены и всплытия важно для эффективной обработки событий в веб-разработке. Отмена позволяет контролировать стандартные действия, связанные с действиями, а всплытие дает возможность управлять порядком обработки на разных уровнях иерархии DOM. Комбинирование этих концепций позволяет создавать более гибкие и мощные приложения веб-разработки.

Читайте также

3 материала