MODUŁ 08
Walidacja formularzy i komunikaty błędów
PPrezentacja dla nauczyciela
Poprawne działanie aplikacji internetowej wymaga zabezpieczenia jej przed brakującymi lub błędnymi danymi. W tym module dowiesz się, jak sprawdzać wypełnienie pól, prezentować czytelne powiadomienia na stronie i w oknach alert oraz kontrolować moment wysyłki formularza.
Sprawdzanie obecności danych i pustych pól
Walidacja po stronie przeglądarki ma na celu natychmiastowe poinformowanie użytkownika o pominięciu wymaganych informacji lub wpisaniu nieprawidłowych wartości. Podstawową operacją jest weryfikacja, czy pole tekstowe nie pozostało puste.
Samo porównanie pole.value === '' bywa zawodne, gdy użytkownik wpisze do kontrolki same spacje. Aby zabezpieczyć skrypt przed takim przypadkiem, stosuje się metodę .trim(), która usuwa białe znaki z początku i końca łańcucha tekstowego: if (pole.value.trim() === '').
Weryfikacja może obejmować również minimalną liczbę znaków (właściwość pole.value.length), poprawność formatu lub sprawdzenie, czy wartość liczbowa mieści się w dopuszczalnym przedziale. Gdy którekolwiek kryterium nie jest spełnione, wyświetlamy stosowny komunikat błędu i przerywamy dalsze wykonywanie operacji.
Zanim porównamy długość lub format, warto oczyścić wpisany tekst. Metoda replaceAll(' ', '') usuwa wszystkie wystąpienia podanego fragmentu — także spacje w środku numeru — natomiast replace() usuwa tylko pierwsze. Dzięki temu numer zapisany jako 500 600 700 zamienia się w 500600700 i można sprawdzić, czy ma dokładnie 9 znaków:
const numer = pole.value.replaceAll(' ', '');
if (numer.length !== 9) {
wynik.textContent = 'Numer musi zawierać dokładnie 9 cyfr!';
} else {
wynik.textContent = 'Numer telefonu poprawny';
}
function walidujRejestracje() {
const login = document.getElementById('poleLogin').value.trim();
const haslo = document.getElementById('poleHaslo').value.trim();
const komunikat = document.getElementById('komunikatWalidacji');
if (login === '' || haslo === '') {
komunikat.textContent = 'Błąd: Wszystkie pola są wymagane!';
komunikat.className = 'blad';
return;
}
if (haslo.length < 6) {
komunikat.textContent = 'Błąd: Hasło musi mieć co najmniej 6 znaków!';
komunikat.className = 'blad';
return;
}
komunikat.textContent = 'Konto ' + login + ' zostało pomyślnie zarejestrowane.';
komunikat.className = 'sukces';
}
Komunikaty w oknie dialogowym i na stronie
Informacje o wyniku walidacji można przekazać użytkownikowi na dwa główne sposoby: za pośrednictwem systemowego okna dialogowego lub bezpośrednio w strukturze dokumentu HTML.
Funkcja alert(komunikat) otwiera modalne okienko z informacją tekstową i przyciskiem zatwierdzenia. Jest to najszybszy sposób zasygnalizowania błędu lub potwierdzenia akcji, jednak blokuje on dalszą interakcję ze stroną do momentu kliknięcia przycisku przez użytkownika.
Alternatywnym i bardzo elastycznym rozwiązaniem jest wpisanie komunikatu do dedykowanego elementu na stronie (np. akapitu <p id="komunikat">) za pomocą właściwości textContent. Możemy wówczas dynamicznie zmienić wygląd powiadomienia, nadając mu odpowiedni kolor za pomocą element.style.color = '#dc2626' lub przypisując klasę CSS, np. element.className = 'blad'.
function zatwierdzRezerwacje() {
const klient = document.getElementById('imieKlienta').value.trim();
const goscie = Number(document.getElementById('liczbaGosci').value);
const potwierdzenie = document.getElementById('potwierdzenieRezerwacji');
if (klient === '') {
alert('Proszę podać imię i nazwisko osoby rezerwującej!');
potwierdzenie.textContent = '';
return;
}
if (goscie < 1 || goscie > 10) {
alert('Liczba gości musi wynosić od 1 do 10 osób.');
potwierdzenie.textContent = 'Błąd: nieprawidłowa liczba osób.';
potwierdzenie.style.color = '#dc2626';
return;
}
alert('Rezerwacja została pomyślnie przyjęta!');
potwierdzenie.textContent = 'Zarezerwowano stolik dla ' + goscie + ' osób na nazwisko ' + klient + '.';
potwierdzenie.style.color = '#16a34a';
}
Obsługa formularza i blokowanie przeładowania
Domyślnym zachowaniem przeglądarki po naciśnięciu przycisku <button type="submit"> lub klawisza Enter w formularzu jest wysłanie danych pod adres określony w atrybucie action i odświeżenie strony. W przypadku aplikacji działających wyłącznie w przeglądarce przeładowanie to skasowałoby wprowadzone dane i wyświetlone wyniki.
Aby powstrzymać domyślną akcję wysyłki, podpinamy funkcję pod zdarzenie submit formularza i wywołujemy metodę event.preventDefault() na przekazanym obiekcie zdarzenia. Daje nam to pełną kontrolę nad procesem weryfikacji.
Jeżeli formularz przejdzie pomyślnie wszystkie etapy walidacji, możemy wyświetlić podsumowanie, a w razie potrzeby wyczyścić pola za pomocą wbudowanej metody formularz.reset().
const formularz = document.getElementById('formKontakt');
formularz.addEventListener('submit', function(event) {
event.preventDefault();
const email = document.getElementById('poleEmail').value.trim();
const zgoda = document.getElementById('zgodaRegulamin').checked;
const status = document.getElementById('statusFormularza');
if (email === '' || !email.includes('@')) {
status.textContent = 'Błąd: Wpisz prawidłowy adres e-mail ze znakiem @';
status.style.color = '#dc2626';
return;
}
if (!zgoda) {
status.textContent = 'Błąd: Musisz zaakceptować regulamin serwisu.';
status.style.color = '#dc2626';
return;
}
status.textContent = 'Zgłoszenie z adresu ' + email + ' wysłane pomyślnie!';
status.style.color = '#16a34a';
formularz.reset();
});
Ćwiczenia
- 1Walidacja pustego pola z oknem alertWyświetl okno alert z ostrzeżeniem, jeśli pole wejściowe po oczyszczeniu ze spacji jest puste.Zadanie i podpowiedzi →
- 2Komunikat błędu inline w akapicieWyświetl komunikat błędu wewnątrz dedykowanego akapitu zamiast okna modalnego.Zadanie i podpowiedzi →
- 3Weryfikacja minimalnej długości hasłaSprawdź, czy wprowadzone hasło ma co najmniej 8 znaków za pomocą właściwości .length.Zadanie i podpowiedzi →
- 4Sprawdzanie zgodności dwóch hasełPorównaj zawartość dwóch pól hasła i poinformuj o braku zgodności.Zadanie i podpowiedzi →
- 5Blokowanie wysyłki formularza preventDefaultZatrzymaj domyślne przeładowanie strony po wysłaniu formularza za pomocą event.preventDefault().Zadanie i podpowiedzi →
- 6Walidacja zakresu wiekuSprawdź, czy wiek użytkownika mieści się w dopuszczalnym przedziale od 18 do 100 lat.Zadanie i podpowiedzi →
- 7Walidacja obecności znaku @ w e-mailuSprawdź za pomocą metody includes(), czy wpisany adres zawiera znak @.Zadanie i podpowiedzi →
- 8Alert przy braku akceptacji regulaminuWyświetl okno alert, jeśli pole wyboru regulaminu nie zostało zaznaczone.Zadanie i podpowiedzi →
- 9Dynamiczna zmiana koloru komunikatu błęduUstaw kolor tekstu komunikatu na czerwony lub zielony za pomocą właściwości style.color.Zadanie i podpowiedzi →
- 10Resetowanie formularza po udanej walidacjiWyczyść wszystkie pola formularza metodą reset() po zatwierdzeniu poprawnych danych.Zadanie i podpowiedzi →
- 11Walidacja długości kodu pocztowegoSprawdź, czy kod pocztowy ma dokładnie 6 znaków (format XX-XXX).Zadanie i podpowiedzi →
- 12Walidacja liczby dodatniej większej od zeraUpewnij się, że wprowadzona liczba sztuk jest liczbą całkowitą większą od zera.Zadanie i podpowiedzi →
- 13Wczesne wyjście z walidacji early returnZastosuj instrukcję return do natychmiastowego przerwania obsługi przy pierwszym błędzie.Zadanie i podpowiedzi →
- 14Weryfikacja numeru telefonu (9 cyfr)Sprawdź, czy wprowadzony numer telefonu składa się z dokładnie 9 cyfr po usunięciu spacji.Zadanie i podpowiedzi →
- 15Czyszczenie błędu podczas poprawiania danychWyczyść wyświetlony wcześniej komunikat błędu natychmiast przy zdarzeniu input.Zadanie i podpowiedzi →
- 16Kompleksowa walidacja formularza rejestracjiZbuduj pełną procedurę walidacji z blokowaniem submitu, weryfikacją pól i raportem.Zadanie i podpowiedzi →