В JavaScript существует механизм всплытия событий (event bubbling), при котором событие, сгенерированное на вложенном элементе, поднимается по иерархии DOM к родительским элементам. Umbrella JS предоставляет удобный и лаконичный способ управления этим процессом с помощью методов для остановки всплытия и предотвращения стандартного поведения браузера.
stop()Метод stop() используется для остановки
дальнейшего распространения события. Он аналогичен вызову
event.stopPropagation() в нативном JavaScript.
u('.child').on('click', function(event) {
u(this).stop();
console.log('Клик на дочернем элементе обработан, всплытие остановлено');
});
Особенности использования stop():
Umbrella, полученному через
u(selector).prevent(),
который предотвращает стандартное действие браузера.prevent()Метод prevent() предотвращает стандартное
поведение элемента, такое как переход по ссылке
<a> или отправка формы <form>.
u('a.external-link').on('click', function() {
u(this).prevent();
console.log('Переход по ссылке отменён');
});
Ключевые моменты:
stop() для полного контроля над
событием:u('.button').on('click', function() {
u(this).stop().prevent();
console.log('Событие обработано, всплытие и действие браузера отменены');
});
stop и preventUmbrella JS позволяет цепочку вызовов для одновременного управления всплытием и стандартным поведением:
u('.link').on('click', function(event) {
u(this).stop().prevent();
console.log('Событие полностью заблокировано');
});
Такой подход обеспечивает чистый и читаемый код, исключая
необходимость работать с объектом event напрямую.
u('.submenu-item').on('click', function() {
u(this).stop();
});
u('form').on('submit', function() {
if (!validateForm()) {
u(this).prevent();
}
});
stop().prevent() для обработки переходов через JavaScript
без изменения адресной строки:u('a.ajax-link').on('click', function() {
u(this).stop().prevent();
loadContentViaAjax(u(this).attr('href'));
});
event.stopPropagation() и
event.preventDefault().u(this), делая код более лаконичным.stop() не предотвращает действия по умолчанию, для
этого нужен prevent().click, submit, change,
keydown и другими.Umbrella JS поддерживает делегирование событий, и stop()
применяется корректно:
u('#menu').on('click', '.submenu-item', function() {
u(this).stop();
console.log('Клик на подменю обработан без всплытия');
});
Здесь событие клика перехватывается на родителе #menu,
но обработчик дочернего элемента успешно останавливает всплытие,
предотвращая срабатывание других обработчиков.
Методы stop() и prevent() Umbrella JS
обеспечивают полный контроль над событиями, упрощая управление
интерактивностью элементов и предотвращая ненужные всплески событий по
дереву DOM. Их применение делает код кратким, читаемым и
предсказуемым в поведении.