Bliss.js предоставляет удобный и лаконичный способ работы с событиями в DOM, упрощая стандартные методы JavaScript. Одной из ключевых возможностей является делегирование событий, которое позволяет обрабатывать события на родительских элементах, а не на каждом отдельном потомке.
Делегирование основано на механизме всплытия событий в DOM. Событие, инициированное на конкретном элементе, «всплывает» вверх по дереву DOM, проходя через всех родителей до корня документа. Это позволяет назначить один обработчик на родительский элемент и перехватывать события от всех его потомков, подходящих под заданный критерий.
В стандартном JavaScript это требует дополнительных проверок:
document.getElementById('parent').addEventListener('click', function(e) {
if(e.target && e.target.matches('button.child')) {
console.log('Клик по кнопке-потомку');
}
});
Bliss.js упрощает эту задачу через свои методы on и
delegate.
on с
делегированиемBliss.js позволяет указывать селектор потомка прямо при назначении обработчика:
$$('#parent').on('click', 'button.child', function(e) {
console.log('Клик по кнопке-потомку через Bliss.js');
});
Разбор параметров:
'#parent' — родительский элемент, на котором будет
висеть обработчик.'click' — тип события.'button.child' — селектор потомка, по которому
фильтруются события.function(e) — функция-обработчик, получающая объект
события.Такой подход позволяет добавлять динамически новые элементы в DOM без необходимости переназначать обработчики.
delegateПомимо использования on, Bliss.js предоставляет метод
delegate, полностью ориентированный на делегирование:
$$('#parent').delegate('button.child', 'click', function(e) {
console.log('Делегированное событие через delegate');
});
Особенности delegate:
on, метод delegate более
наглядно подчеркивает делегированное назначение события, особенно при
работе с большим количеством потомков.Функция-обработчик получает объект события, в котором
e.target указывает на элемент, вызвавший событие, а
this ссылается на родительский элемент, на
котором назначено делегирование.
$$('#parent').on('click', 'button.child', function(e) {
console.log(this); // #parent
console.log(e.target); // button.child, на который кликнули
});
Это позволяет безопасно работать с контекстом родителя, не теряя информации о конкретном элементе-потомке.
Bliss.js упрощает удаление обработчиков через метод
off:
let handler = function(e) {
console.log('Клик по кнопке');
};
$$('#parent').on('click', 'button.child', handler);
// Позже можно удалить
$$('#parent').off('click', 'button.child', handler);
Важно: при делегировании необходимо передавать ту же функцию, чтобы удаление сработало корректно.
Динамически добавляемые элементы Делегирование позволяет обрабатывать события на элементах, которые создаются после загрузки страницы.
Упрощение кода Нет необходимости назначать обработчики на каждый отдельный элемент, что особенно важно при работе с большими списками или таблицами.
Повышение производительности Вместо сотен отдельных обработчиков достаточно одного на родительском элементе, что снижает нагрузку на DOM и облегчает сборку мусора.
Bliss.js поддерживает назначение нескольких событий через пробел:
$$('#parent').on('click mouseenter', 'button.child', function(e) {
console.log('Клик или наведение на кнопку-потомок');
});
Это работает как для on, так и для
delegate, позволяя объединять обработку нескольких типов
событий в одном месте.
Кроме селектора, в обработчике можно добавлять дополнительные условия:
$$('#parent').on('click', 'button.child', function(e) {
if(e.target.dataset.action === 'delete') {
console.log('Удаление элемента');
}
});
Такой подход делает делегирование гибким и позволяет легко управлять различными сценариями на одной и той же группе потомков.
Делегирование можно комбинировать с методами hide,
show, toggleClass, что позволяет строить
полноценные интерактивные интерфейсы:
$$('#parent').delegate('button.toggle', 'click', function(e) {
$$(e.target).toggleClass('active');
});
Это делает делегирование не только способом управления событиями, но и инструментом для динамического изменения интерфейса без лишнего кода.
Делегирование в Bliss.js сочетает лаконичность синтаксиса и полное использование возможностей всплытия событий, облегчая создание масштабируемых, динамических интерфейсов с минимальными усилиями.