Zdarzenia resetowania formularza i zarządzanie stanem
Obsługiwanie resetowania formularza i śledzenie stanu pól podczas interakcji użytkownika
Zdarzenia resetowania formularza i zarządzanie stanem to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.
Zdarzenie reset
Wywołanie form.reset() lub kliknięcie <button type="reset"> emituje zdarzenie reset na formularzu. Każde pole powraca do wartości początkowej (określonej przez atrybut value albo pustej w przypadku nowych pól). Można nasłuchiwać tego zdarzenia, aby programowo reagować na resetowanie formularza.
Wartości domyślne
Stan początkowy używany podczas resetowania określa właściwość defaultValue, defaultChecked lub defaultSelected — nie bieżąca wartość. Właściwości te odzwierciedlają atrybuty value/checked/selected w kodzie HTML, ustalone podczas parsowania i niezmieniane przez interakcję użytkownika.
Programowe aktualizowanie wartości domyślnych
Aby bieżąca wartość stała się nową wartością „domyślną” (dzięki czemu kolejne resety będą do niej powracać), należy ustawić input.defaultValue = input.value. Jest to przydatne po pomyślnym zapisaniu danych: kolejne resety przywrócą zapisany stan zamiast pierwotnie pustego formularza.
form.addEventListener("submit", () => {
// After save, treat current as defaults
Array.from(form.elements).forEach((el) => {
if ("defaultValue" in el) el.defaultValue = el.value;
});
});Nasłuchiwanie zdarzenia reset
Zdarzenie reset jest emitowane przed przywróceniem wartości. Aby sprawdzić stan po resecie, należy odroczyć wykonanie do następnego mikrotyknięcia: form.addEventListener("reset", () => queueMicrotask(() => { ... use new values ... })). To często mylący szczegół dotyczący kolejności zdarzeń.
Zapobieganie resetowaniu
Jeśli w procedurze obsługi zdarzenia reset wywołają Państwo e.preventDefault(), resetowanie zostanie anulowane, a wartości pozostaną bez zmian. Jest to przydatne do wyświetlania potwierdzenia „czy na pewno?” w formularzach zawierających ważne dane użytkownika.
Śledzenie stanu zmian
Aby sprawdzić, czy formularz został zmodyfikowany, należy porównać bieżące wartości z wartościami domyślnymi: const dirty = Array.from(form.elements).some(el => el.value !== el.defaultValue). Można w ten sposób włączać lub wyłączać przycisk zapisu albo wyświetlać potwierdzenie niezapisanych zmian.
Potwierdzenie beforeunload
Aby ostrzec użytkownika przed opuszczeniem strony z formularzem zawierającym niezapisane zmiany: window.addEventListener("beforeunload", (e) => { if (isDirty(form)) { e.preventDefault(); } }). Przeglądarki wyświetlają własny ogólny monit „opuścić stronę?”, a niestandardowe komunikaty nie są już obsługiwane we współczesnych przeglądarkach.
Przyciski resetowania zwykle pogarszają UX
Przyciski resetowania przywracają wartości wszystkich pól po jednym przypadkowym kliknięciu, co często prowadzi do katastrofalnych skutków. W większości nowoczesnych interfejsów całkowicie się z nich rezygnuje lub ukrywa je za potwierdzeniem. Jeśli resetowanie jest potrzebne, należy umieścić przycisk z dala od przycisku wysyłania i rozważyć możliwość jednokrotnego cofnięcia.
Utrwalanie stanu formularza
W przypadku długich formularzy należy zapisywać stan w localStorage podczas zdarzeń input i przywracać go podczas ładowania strony. Warto dodać monit „Przywrócić wersję roboczą?”, aby użytkownicy nie tracili pracy po przypadkowym zamknięciu karty. Należy połączyć to z procedurami obsługi resetowania i wysyłania formularza, aby usuwać zapisany stan, gdy nie jest już potrzebny.
form.addEventListener("input", () => {
localStorage.setItem("form-draft", JSON.stringify(new FormData(form)));
});Komponenty niestandardowe i reset
Niestandardowe elementy formularza (zbudowane jako komponenty webowe) uczestniczą w resetowaniu formularza za pośrednictwem ElementInternals: w metodzie formResetCallback należy przywrócić wartość domyślną. Jest to konieczne, gdy niestandardowy element opakowuje wewnętrzne pole input, które wymaga jawnego zresetowania.
Niestandardowe elementy powiązane z formularzem
Zadeklarowanie static formAssociated = true w klasie niestandardowego elementu i użycie this.attachInternals() udostępnia metody formResetCallback, formStateRestoreCallback, formDisabledCallback oraz formAssociatedCallback, umożliwiając integrację z cyklem życia formularza.
Sprawdzenie wiedzy
Do jakiej wartości powraca każde pole po wywołaniu form.reset()?
Podsumowanie
Zdarzenie reset jest emitowane podczas wykonywania form.reset(), a pola powracają do wartości defaultValue/defaultChecked/defaultSelected. Po zapisaniu danych można zaktualizować wartości domyślne, aby stały się nowym stanem przywracanym przez reset. Stan zmian można śledzić, porównując bieżące wartości z wartościami domyślnymi, a w przypadku długich formularzy zapisywać go w localStorage. beforeunload służy do ostrzegania przed opuszczeniem strony. Niestandardowe elementy można integrować za pomocą formAssociated i formResetCallback.
Często zadawane pytania
Czy lekcja „Zdarzenia resetowania formularza i zarządzanie stanem” jest bezpłatna?
Tak — pełny tekst „Zdarzenia resetowania formularza i zarządzanie stanem” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zdarzenia resetowania formularza i zarządzanie stanem”?
Obsługiwanie resetowania formularza i śledzenie stanu pól podczas interakcji użytkownika Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć HTML Academy?
Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Zdarzenia resetowania formularza i zarządzanie stanem”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?
Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- FormData API
- Constraint Validation API
- reportValidity i setCustomValidity
- Zdarzenia resetowania formularza i zarządzanie stanem