JS метод Event.stopPropagation()


Загальний опис

Метод stopPropagation використовується для зупинки подій від подальшого поширення на батьківські елементи в DOM. Це корисно, коли ви хочете контролювати, як обробляються події на різних рівнях ієрархії DOM.

Поширення подій відбувається в двох фазах: фаза захоплення і фаза сприйняття. Спочатку подія проходить через усі батьківські елементи (фаза захоплення), а потім досягає цільового елемента (фаза сприйняття). Якщо ви викликаєте stopPropagation у будь-якому обробнику події, подія не продовжить рухатися до інших обробників на батьківських елементах, але обробники на тому ж елементі все ще будуть виконані.

Наприклад, якщо у вас є кнопка всередині div, який також має обробник події, виклик stopPropagation в обробнику кнопки запобіжить виконанню обробника div. Це може бути особливо корисним у сценаріях, де ви не хочете, щоб взаємодія з елементом спричинила ефект на батьківському елементі.

Приклад використання:

document.getElementById('myButton').addEventListener('click', function(event) {
   console.log('Button clicked');
   event.stopPropagation();
});

document.getElementById('myDiv').addEventListener('click', function() {
   console.log('Div clicked');
});

У цьому випадку, натискання на кнопку призведе до того, що повідомлення "Button clicked" буде виведено в консоль, але "Div clicked" не з'явиться.

автор: Bond

Порада

Уникайте зупинки поширення подій, якщо у вас є обробники, які критично залежать від інформації про події з батьківських елементів. Це може ускладнити відладку, особливо в складних інтерфейсах користувача.

автор: Bond
Порада

Використовуйте stopPropagation у комбінації з умовами. Наприклад, якщо вам потрібно зупинити подію тільки за певних умов, ви можете перевірити, чи натиснута конкретна кнопка, і тільки тоді зупинити поширення.

автор: Bond
Порада

У складних компонентах, таких як модальні вікна, зупинка поширення подій може бути корисною, щоб запобігти закриттю модального вікна, якщо користувач натискає на внутрішні елементи.

автор: Bond

Синтаксис

event.stopPropagation();

Повернення

undefined

Повертає undefined, оскільки цей метод не має значення, яке можна отримати після виклику. Він зупиняє подальше поширення події в бульбашковій або поглинальній фазі, залежно від того, як подія була ініційована. Це означає, що подія більше не буде передаватися на батьківські елементи в дереві DOM, але інші обробники на тому ж елементі можуть продовжувати виконуватися.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 1 1 7 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
14.5.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

Цей код демонструє, як зупинити закриття модального вікна, якщо натискають кнопку закриття. Таким чином, ви можете контролювати, що саме закриває модальне вікно.

HTML

<div id="modal">Демонстраційний елемент</div>
<button id="closeButton">Закрити</button>

JS

const modal = document.getElementById('modal');
const closeButton = document.getElementById('closeButton');

closeButton.addEventListener('click', function(event) {
    modal.style.display = 'none';
    event.stopPropagation(); // Зупиняємо поширення події
});

modal.addEventListener('click', function() {
    modal.style.display = 'none'; // Закриваємо модальне вікно при натисканні на фон
});
автор: Bond

У цьому прикладі, якщо форма не заповнена правильно, кнопка не відправляє форму, і подія не поширюється далі, що дозволяє уникнути потенційних помилок або небажаних поведінок.

HTML

<form id="myForm">
    <label>Ім'я: <input type="text" name="name" value="Лесь"></label>
    <button type="submit">Надіслати</button>
</form>
<button id="submitButton">Надіслати</button>

JS

const form = document.getElementById('myForm');
const submitButton = document.getElementById('submitButton');

submitButton.addEventListener('click', function(event) {
    if (!form.checkValidity()) {
        event.preventDefault(); // Зупиняємо стандартну поведінку кнопки
        event.stopPropagation(); // Зупиняємо подію на батьківських елементах
        alert('Форма не заповнена правильно.');
    }
});
автор: Bond

У цьому прикладі, коли користувач натискає на кнопку "Натисни мене!", спочатку з'являється алерт з повідомленням "Кнопка натиснута!", але оскільки ми викликали stopPropagation, подія не доходить до батьківського елемента, і повідомлення "Батьківський елемент натиснуто!" не з'являється. Це дозволяє контролювати, які обробники подій активуються, і уникати небажаних ефектів при взаємодії з елементами.

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід