HTML Academy · Урок

События сброса формы и управление состоянием

Обрабатывайте сброс формы и отслеживайте состояние полей во время взаимодействия с пользователем

Урок 4 из 413 шагов

«События сброса формы и управление состоянием» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Событие reset

Вызов form.reset() или нажатие <button type="reset"> вызывает событие reset у формы. Каждое поле возвращается к исходному значению — атрибуту value или пустому значению для новых полей. Обрабатывайте это событие, чтобы программно реагировать на сброс.

Значения по умолчанию

Исходное состояние, используемое при сбросе, задаётся свойством defaultValue, defaultChecked или defaultSelected, а не текущим значением. Эти свойства отражают атрибуты value, checked и selected в HTML, устанавливаются во время разбора документа и не изменяются при взаимодействии с пользователем.

Программное обновление значений по умолчанию

Чтобы сделать текущее значение новым значением «по умолчанию» и возвращаться к нему при последующих сбросах, задайте input.defaultValue = input.value. Это полезно после успешного сохранения: последующие сбросы вернут форму к сохранённому состоянию, а не к исходной пустой форме.

form.addEventListener("submit", () => {
  // After save, treat current as defaults
  Array.from(form.elements).forEach((el) => {
    if ("defaultValue" in el) el.defaultValue = el.value;
  });
});

Обработка события reset

Событие reset вызывается до возврата значений. Чтобы проверить состояние после сброса, отложите проверку до следующей микрозадачи: form.addEventListener("reset", () => queueMicrotask(() => { ... use new values ... })). Это частая причина путаницы при работе со временем вызова событий.

Предотвращение сброса

Если вызвать e.preventDefault() в обработчике события reset, сброс будет отменён, а значения останутся прежними. Это полезно для подтверждения «Вы уверены?» в формах со значительным объёмом введённых данных.

Отслеживание несохранённых изменений

Сравнивайте текущие значения со значениями по умолчанию, чтобы определить, есть ли в форме несохранённые изменения: const dirty = Array.from(form.elements).some(el => el.value !== el.defaultValue). Это позволяет включать и отключать кнопку сохранения или показывать подтверждение при наличии несохранённых изменений.

Подтверждение beforeunload

Чтобы предупредить пользователя перед уходом со страницы с несохранёнными изменениями, используйте: window.addEventListener("beforeunload", (e) => { if (isDirty(form)) { e.preventDefault(); } }). Браузеры показывают стандартное приглашение «покинуть сайт?», а собственные сообщения в современных браузерах больше не поддерживаются.

Кнопки сброса обычно ухудшают взаимодействие

Кнопки сброса одним случайным нажатием очищают все поля, что часто приводит к серьёзным последствиям. В большинстве современных интерфейсов их полностью исключают или скрывают за подтверждением. Если сброс необходим, разместите его подальше от кнопки отправки и предусмотрите отмену одним действием.

Сохранение состояния формы

Для длинных форм сохраняйте состояние в localStorage при событиях input и восстанавливайте его при загрузке. Добавьте запрос «Восстановить черновик?», чтобы пользователи не потеряли работу при случайном закрытии вкладки. Сочетайте это с обработчиками сброса и отправки, чтобы удалять сохранённое состояние, когда оно больше не нужно.

form.addEventListener("input", () => {
  localStorage.setItem("form-draft", JSON.stringify(new FormData(form)));
});

Собственные компоненты и reset

Собственные элементы формы, созданные как веб-компоненты, участвуют в сбросе формы через ElementInternals: в методе formResetCallback восстановите значение по умолчанию. Это необходимо, если собственный элемент содержит внутреннее поле, которому требуется явный сброс.

Собственные элементы, связанные с формой

Объявление static formAssociated = true в классе собственного элемента и использование this.attachInternals() открывают доступ к formResetCallback, formStateRestoreCallback, formDisabledCallback и formAssociatedCallback для интеграции с жизненным циклом формы.

Проверка знаний

К какому значению возвращается каждое поле при вызове form.reset()?

Итоги

Событие reset вызывается при выполнении form.reset(); поля возвращаются к значениям defaultValue, defaultChecked и defaultSelected. После сохранения обновляйте значения по умолчанию, чтобы они стали новым состоянием сброса. Отслеживайте несохранённые изменения, сравнивая текущие значения со значениями по умолчанию, сохраняйте состояние длинных форм в localStorage и используйте beforeunload для предупреждений при уходе со страницы. Собственные элементы интегрируются через formAssociated и formResetCallback.

Можно начать бесплатно

Изучай HTML с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
40
Уроки
159

Часто задаваемые вопросы

Урок «События сброса формы и управление состоянием» бесплатный?

Да — полный текст урока «События сброса формы и управление состоянием» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «События сброса формы и управление состоянием»?

Обрабатывайте сброс формы и отслеживайте состояние полей во время взаимодействия с пользователем Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «События сброса формы и управление состоянием»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. API FormData
  2. Constraint Validation API
  3. reportValidity и setCustomValidity
  4. События сброса формы и управление состоянием
← Назад к HTML Academy