В библиотеке Dom7, которая используется в основном в рамках фреймворка Framework7, управление событиями строится вокруг методов, похожих на jQuery, но с более легковесным API. Одной из ключевых задач при работе с событиями является контроль за всплытием событий и предотвращение их стандартного поведения.
event.stopPropagation()Каждое событие в DOM имеет два основных этапа: фаза захвата и фаза всплытия. Всплытие — это процесс, когда событие, возникшее на вложенном элементе, постепенно распространяется вверх по DOM-дереву к родительским элементам. Для предотвращения такого поведения используется метод:
$$('.child').on('click', function (event) {
event.stopPropagation();
console.log('Клик обработан только на дочернем элементе');
});
Ключевые моменты:
stopPropagation() полностью останавливает
распространение события на родительские элементы.event.preventDefault()Иногда необходимо не просто остановить всплытие, а отменить стандартное поведение браузера для конкретного события:
$$('a.prevent-link').on('click', function (event) {
event.preventDefault();
console.log('Переход по ссылке отменён');
});
Особенности:
stopPropagation() для полной
изоляции поведения элемента.event.stopImmediatePropagation()Когда требуется не только остановить всплытие, но и предотвратить
выполнение других обработчиков на том же элементе,
применяется stopImmediatePropagation():
$$('.button').on('click', function (event) {
event.stopImmediatePropagation();
console.log('Этот обработчик заблокировал все остальные на элементе');
});
$$('.button').on('click', function () {
console.log('Этот обработчик не будет выполнен');
});
Особенности использования:
Часто на практике используется комбинированное управление событиями:
$$('.form-button').on('click', function (event) {
event.preventDefault();
event.stopPropagation();
console.log('Ни всплытия, ни стандартного действия не произойдет');
});
В этом примере:
preventDefault() отменяет стандартное действие
(например, отправку формы).stopPropagation() предотвращает всплытие события к
родителям.Event, что позволяет использовать
все стандартные методы (stopPropagation,
preventDefault, stopImmediatePropagation)
напрямую.on, off,
once) интегрированы с системой делегирования событий,
поэтому остановка всплытия важна при работе с динамически добавляемыми
элементами.При делегировании событие привязывается к родительскому элементу, а не к самому элементу, на котором оно возникает:
$$('.list').on('click', '.item', function (event) {
event.stopPropagation();
console.log('Клик на элементе списка обработан отдельно');
});
stopPropagation() здесь блокирует дальнейшее
распространение к родителю, но не мешает работе делегирования на других
элементах списка.stopPropagation() — предотвращает
распространение события вверх по DOM.preventDefault() — отменяет
стандартное действие браузера.stopImmediatePropagation() — блокирует
выполнение других обработчиков на том же элементе.Эти методы являются основой управления событиями в Dom7 и позволяют строить сложные интерактивные интерфейсы с точным контролем поведения элементов.