JavaScript свойство Event.cancelBubble
Определение и применение
JavaScript свойство cancelBubble объекта
Event
при установке логического значения true перед возвратом из обработчика событий прекращает дальнейшую
передачу текущего события (предотвращает всплытие по дереву DOM). Свойство является историческим псевдонимом метода
stopPropagation().
Поддержка браузерами
Устарела
Спецификация: dom.spec.whatwg
Поддерживается во всех основных браузерах с 2017 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
cancelBubble | 1 Версия 1 выпущена в 2008 г. Примечание MDN (англ.) Starting with Chrome 58 and Opera 45, setting this property to false does nothing, as per spec discussion. | 12 | 53 Версия 53 выпущена в 2017 г. Версия 1 выпущена в 2004 г. — Удалено в 53; Частичная поддержка Примечание MDN (англ.) Only supported for | ≤12.1 Поддержка появилась не позднее версии 12.1 (2012 г.) Примечание MDN (англ.) Starting with Chrome 58 and Opera 45, setting this property to false does nothing, as per spec discussion. | 1 | 18 Версия 18 выпущена в 2012 г. Примечание MDN (англ.) Starting with Chrome Android 58 and Opera 45, setting this property to false does nothing, as per spec discussion. | 53 Версия 53 выпущена в 2017 г. Версия 4 выпущена в 2011 г. — Удалено в 53; Частичная поддержка Примечание MDN (англ.) Only supported for | ≤12.1 Поддержка появилась не позднее версии 12.1 (2012 г.) Примечание MDN (англ.) Starting with Chrome 58 and Opera 45, setting this property to false does nothing, as per spec discussion. | 1 | 1.0 Версия 1.0 выпущена в 2013 г. Примечание MDN (англ.) Starting with Samsung Browser 7.0 and Opera 45, setting this property to false does nothing, as per spec discussion. | 4.4 Версия 4.4 выпущена в 2013 г. Примечание MDN (англ.) Starting with WebView Android 58 and Opera 45, setting this property to false does nothing, as per spec discussion. | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
// чтение
const stopped = event.cancelBubble;
// остановка распространения (устаревший способ)
event.cancelBubble = true;
Спецификация
Пример старого кода
Остановка всплытия через cancelBubble
Нажмите и кликните по вложенному блоку: в консоли появятся сообщения DIV 1 и DIV 2. Отметьте флажок и кликните снова — сработает только обработчик вложенного блока.
index.html
<div class="container" data-migration-click-0="">
DIV 2
<div data-migration-click-2="">DIV 1 (click me)</div>
</div>
<label>Stop propagation<input type="checkbox" /></label>
main.js
const myFunc = function (event) {
alert('DIV 1')
if (document.querySelector('input').checked) {
event.cancelBubble = true
}
}
const myFunc2 = function (event) {
alert('DIV 2')
}
// Обработчики кнопок перенесены из HTML для запуска с CSP без inline-скриптов.
document.querySelector('[data-migration-click-0]').addEventListener('click', function (event) {
myFunc2()
})
document.querySelector('[data-migration-click-0]').removeAttribute('data-migration-click-0')
document.querySelector('[data-migration-click-2]').addEventListener('click', function (event) {
myFunc(event)
})
document.querySelector('[data-migration-click-2]').removeAttribute('data-migration-click-2')
style.css
.container {
height: 100px;
padding: 30px;
background: plum;
}
div > div {
height: 70px;
background: yellow;
}
Нажмите , чтобы запустить пример.
В этом примере мы разместили два элемента
<div>, один из которых вложили во внутрь другого, с использованием метода
addEventListener()
назначили обработчики события "click" (нажатие левой кнопкой мыши на элементе). Если при снятой галочке
элемента
<input>
произвести нажатие по вложенному элементу, то произойдет вызов двух обработчиков события, так как событие будет
распространяться вверх по дереву DOM.
А, если мы поставим галочку на элементе
<input>
и произведем нажатие по вложенному элементу, то в этом случае сработает только обработчик вложенного элемента. Это
связано с тем, что мы используем свойства cancelBubble объекта
Event, которое при использовании логического значения true прекращает дальнейшую передачу текущего события
(предотвращает всплытие по дереву DOM).