Однократные обработчики событий в jQuery позволяют привязывать функцию к событию таким образом, чтобы она выполнялась только один раз. После первого срабатывания обработчик автоматически удаляется, что упрощает управление событиями и предотвращает нежелательное повторное выполнение кода.
.one()Основной инструмент для создания однократных обработчиков — метод
.one(). Его синтаксис:
$(селектор).one(событие, [селектор_для_делегирования], функция);
Параметры:
событие — строка с названием события, например
"click", "mouseover",
"keydown".[селектор_для_делегирования] — необязательный параметр,
позволяющий использовать делегирование событий.функция — функция-обработчик, которая выполнится один
раз при возникновении события.Пример использования:
$("#button").one("click", function() {
alert("Эта кнопка сработает только один раз");
});
После первого клика на кнопку с ID button обработчик
автоматически снимается, и повторные клики не будут вызывать
функцию.
Метод .one() поддерживает делегирование
событий, что полезно при работе с динамически добавляемыми
элементами:
$(document).one("click", ".dynamic-button", function() {
console.log("Эта кнопка была нажата один раз");
});
В этом примере обработчик привязан к document, но
срабатывает только при клике на элемент с классом
.dynamic-button. После первого срабатывания обработчик
удаляется автоматически, даже если кнопка добавлена в DOM
динамически.
Можно привязать одну функцию к нескольким событиям, которые должны сработать только один раз:
$("#input").one("focus blur", function() {
console.log("Событие focus или blur сработало один раз");
});
Функция выполнится при первом событии из перечисленных
(focus или blur) и затем удалится.
.one() и
.on()Метод .on() позволяет привязывать обработчики событий на
постоянной основе, а .one() — одноразовые.
Разница особенно важна при работе с динамическими элементами и
предотвращении утечек памяти:
.on() сохраняет обработчик до явного удаления через
.off()..one() удаляет обработчик автоматически после первого
срабатывания.Пример сравнения:
// Постоянный обработчик
$("#button").on("click", function() {
console.log("Каждый клик будет обработан");
});
// Однократный обработчик
$("#button").one("click", function() {
console.log("Только первый клик обработан");
});
Однократные обработчики удобно использовать вместе с эффектами и анимациями:
$("#box").one("mouseenter", function() {
$(this).fadeOut(500);
});
Здесь блок с ID box исчезнет при первом наведении мыши и
больше не будет реагировать на mouseenter.
Также .one() можно применять совместно с AJAX или
динамическими событиями:
$("#loadData").one("click", function() {
$.get("/data", function(response) {
$("#container").html(response);
});
});
this в обработчике
сохраняется и указывает на элемент, к которому привязан обработчик..one() можно использовать с
множественными селекторами, передавая строку с
разделением через запятую:$(".btn, #submit").one("click", function() {
console.log("Однократный клик на любом элементе");
});
Метод .one() является безопасным и эффективным
инструментом для управления событиями в jQuery, позволяя уменьшить
сложность кода и избегать лишних проверок на повторные действия.