Вебсправочник
Ваш первый сайт

Урок: проверить обработчик с once

Опция once автоматически снимает обработчик после первого вызова. Урок показывает разницу между повторным событием на том же элементе и повторной регистрацией нового обработчика.

Назначение

Опция once автоматически снимает обработчик после первого вызова. Урок показывает разницу между повторным событием на том же элементе и повторной регистрацией нового обработчика.

Как это работает

Для воспроизводимого примера используется отдельная кнопка в памяти и программный click. Счётчик изменяется в обработчике. Эти события синтетические и не доказывают полноценность пользовательского сценария в браузере.

Пример

const button = document.createElement("button");
button.type = "button";
let calls = 0;
button.addEventListener("click", () => {
  calls += 1;
}, {once:true});
button.click();
button.click();
console.log("Число вызовов:", calls);

Что должно получиться

Счётчик равен 1, хотя click вызван дважды. Обработчик удалён после первой обработки. Новая отдельная регистрация снова сможет сработать один раз.

Граница применения и частая ошибка

Once не защищает сервер от повторной операции и не гарантирует успешность асинхронного действия. Если первый вызов завершился ошибкой, обработчик уже снят. Для повторной попытки нужно явно проектировать состояние, а не рассчитывать на эту опцию как на бизнес-правило.

Самостоятельная проверка

В собственной видимой кнопке повторите опыт мышью и клавиатурой. Затем намеренно зарегистрируйте две разные функции с once и посчитайте вызовы. Объясните, почему получилось два действия при первом событии.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.