Одноразовые обработчики событий — это функции, которые выполняются
только один раз при срабатывании события и
автоматически удаляются после первого вызова. В Zepto.js такая
функциональность реализуется через метод one, который
является упрощённым аналогом jQuery one.
one$(селектор).one(событие, [селектор_вложенного_элемента], обработчик);
'click', 'mouseover' и т.д.).Пример простого одноразового обработчика:
$('#button').one('click', function() {
console.log('Кнопка была нажата один раз');
});
В этом примере сообщение в консоли появится только при первом клике. При последующих кликах обработчик уже не срабатывает.
Метод one поддерживает привязку к нескольким событиям
через пробел:
$('#input').one('focus blur', function() {
console.log('Поле либо получило, либо потеряло фокус один раз');
});
Вызов обработчика произойдет только один раз для
любого из указанных событий. После срабатывания все
привязки через one для этого элемента будут удалены.
oneОдноразовые обработчики поддерживают делегирование событий. Это позволяет навешивать обработчик на родительский элемент для элементов, которые могут быть добавлены динамически:
$('#list').one('click', 'li', function() {
console.log('Был кликнут элемент списка один раз');
});
Здесь обработчик сработает при первом клике на любой
<li> внутри #list. После этого
обработчик будет автоматически удалён, что предотвращает накопление
лишних слушателей при динамическом добавлении элементов.
Если внутри одноразового обработчика возвращается false,
это одновременно предотвращает выполнение стандартного
действия и останавливает всплытие события:
$('#link').one('click', function() {
console.log('Ссылка нажата один раз');
return false; // предотвращает переход по ссылке
});
Это удобная практика при создании одноразовых действий для ссылок или кнопок, которые должны выполнять действие только при первом нажатии.
Метод one в Zepto.js реализован через обёртку вокруг
обычного обработчика on. При срабатывании события
вызывается функция-обёртка, которая:
off.Такой подход гарантирует, что обработчик не будет вызываться повторно, даже если событие произошло несколько раз почти одновременно.
Одноразовое открытие модального окна:
$('#openModal').one('click', function() {
$('#modal').show();
console.log('Модальное окно открыто один раз');
});
Отправка формы только при первом клике:
$('#submit').one('click', function(e) {
e.preventDefault();
sendFormData();
console.log('Форма отправлена один раз');
});
Событие на динамически созданные элементы:
$('#container').one('mouseenter', '.item', function() {
$(this).addClass('highlight');
console.log('Элемент подсвечен один раз');
});
onon навешивает многоразовый обработчик,
который будет выполняться каждый раз при событии.one — одноразовый обработчик,
автоматически снимаемый после первого вызова.one снижает риск утечки
памяти, особенно при работе с динамическими элементами или
частыми событиями.Использовать для действий, которые должны выполняться только один раз, например:
Совмещать с делегированием, если элементы создаются динамически.
Избегать one для событий, которые должны реагировать
на каждое действие пользователя.
Метод one делает управление событиями в Zepto.js
эффективным и безопасным, позволяя создавать
одноразовые действия без необходимости вручную удалять
обработчики.