Dom7 — это легковесная библиотека, предоставляющая удобный интерфейс для работы с DOM в стиле jQuery, активно используемая в проектах, таких как Framework7. Одним из ключевых аспектов работы с Dom7 является управление событиями: добавление, удаление и делегирование обработчиков.
on(eventName, targetSelector, listener, capture)
Позволяет привязать обработчик к одному или нескольким событиям. Метод
поддерживает делегирование, если указан targetSelector.
Параметры:
eventName — строка или массив строк с названиями
событий ('click', 'input',
'mouseenter' и т.д.).targetSelector — CSS-селектор для делегирования
события. Если не указан, обработчик применяется к самим элементам
коллекции.listener — функция-обработчик события.capture — булево значение, указывающее на фазу события
(по умолчанию false).Пример привязки события клика:
const $$ = Dom7;
$$('.button').on('click', function (e) {
console.log('Кнопка нажата', e.target);
});
Пример делегирования:
$$('.list').on('click', '.list-item', function (e) {
console.log('Элемент списка выбран:', this.textContent);
});
В этом случае обработчик добавляется на контейнер .list,
а срабатывает только при клике на элементы .list-item.
off(eventName, targetSelector, listener, capture)
Удаляет ранее привязанный обработчик события. Параметры аналогичны
методу on.
Пример удаления обработчика:
function handleClick() {
console.log('Нажатие удаляется');
}
$$('.button').on('click', handleClick);
$$('.button').off('click', handleClick);
Если обработчик был привязан через делегирование, необходимо указывать тот же селектор и функцию.
once(eventName, targetSelector, listener, capture)
Привязывает обработчик, который выполнится один раз, а затем
автоматически удаляется. Особенно полезно для однократных действий,
например, модальных окон или одноразовых уведомлений.
Пример:
$$('.alert-button').once('click', function () {
console.log('Сообщение показано один раз');
});
Dom7 позволяет передавать дополнительные данные через объект события
с помощью метода trigger или через замыкания.
Пример с trigger:
$$('.button').on('customEvent', function (e, customData) {
console.log('Полученные данные:', customData);
});
$$('.button').trigger('customEvent', { message: 'Привет' });
Обработчик получает вторым аргументом объект
{ message: 'Привет' }.
Внутри обработчиков можно использовать стандартные свойства DOM:
e.preventDefault() — предотвращает стандартное действие
браузера (например, переход по ссылке).e.stopPropagation() — останавливает всплытие события
вверх по DOM.e.stopImmediatePropagation() — полностью прекращает
обработку события, включая другие обработчики на том же элементе.Пример:
$$('.link').on('click', function (e) {
e.preventDefault();
console.log('Переход по ссылке заблокирован');
});
Метод on поддерживает указание нескольких событий через
пробел. Это позволяет привязать один обработчик к различным типам
событий одновременно:
$$('.input').on('focus blur', function () {
console.log('Элемент получил или потерял фокус');
});
this в
обработчикахВ обработчиках событий Dom7 this всегда указывает на
текущий DOM-элемент, на котором сработало событие. Для делегирования это
будет элемент, соответствующий селектору
targetSelector.
Пример делегирования с использованием this:
$$('.list').on('click', '.list-item', function () {
console.log('Выбран элемент:', this.textContent);
});
Это позволяет напрямую работать с атрибутами, классами или текстом выбранного элемента.
trigger(eventName, data) — программно
вызывает событие на элементах коллекции, передавая необязательные
данные.triggerHandler(eventName, data) —
вызывает событие только для первого элемента, не инициируя стандартное
поведение и не всплывая.once — для одноразового события.Эти методы позволяют строить сложную событийную логику без необходимости добавлять глобальные слушатели или постоянно проверять состояние элементов.
targetSelector.off.once для событий, которые должны сработать
только один раз, чтобы избежать утечек памяти.trigger позволяют
создавать модульный код и отделять логику обработки от реального
взаимодействия пользователя.Dom7 обеспечивает гибкую, но понятную систему работы с событиями, позволяя создавать сложные интерактивные интерфейсы без необходимости прямого управления addEventListener на каждом элементе.