Formularze - walidacja
Sprawdzanie danych, które wprowadza użytkownik to jedna z ważniejszych rzeczy, o jaką musimy zadbać, ale równocześnie też nie zawsze prosta do wykonania. Dane możemy sprawdzać na wiele sposobów, które często będzie uzależnione od budowy formularza i zawartych w nim mechanizmów.
Jak przeprowadzić walidację?
Przykładowa walidacja formularzy może przebiegać w kilku etapach:
Pierwszy etap to dynamiczna podpowiedź w czasie wprowadzania danych przez użytkownika. Wykorzystamy tutaj zdarzenia change, focus, blur, keyup, keydown, keypress lub input - zależnie od sytuacji. Dodanie takich dynamicznych podpowiedzi znacząco może poprawić użyteczność naszego formularza, ale nie zawsze musimy je stosować
Drugi etap to sprawdzenie danych w momencie, gdy użytkownik chce wysłać dany formularz. Jeżeli dane są poprawne, dany formularz wysyłamy. W przeciwnym razie pokazujemy stosowną informację.
Ostatni - najważniejszy etap - to sprawdzenie przesłanych danych po stronie serwera. Jest to najważniejszy krok, ponieważ dane na nasz serwer mogą być wysłane na różne sposoby, nie tylko z naszego formularza.
Prosta walidacja
Domyślną akcją każdego formularza jest wysłanie danych na adres podany w atrybucie action. Jeżeli atrybut ten nie zostanie podany, wtedy wysyłka danych jest wykonywana na aktualny adres.
<form action="https://kursjs.pl/login">
...
</form>Wraz z wysłaniem formularza strona zostanie albo przeniesiona na nowy adres, albo zostanie przeładowana.
Aby zareagować na wysyłkę formularza pierwszą czynnością jest podpiąć się pod zdarzenie submit formularza, a następnie użycie funkcji e.preventDefault(), która przerwie domyślną akcję (wysyłkę):
const form = document.querySelector("form");
const input = form.querySelector("input");
form.addEventListener("submit", e => {
e.preventDefault();
//jeżeli wszystko ok to wysyłamy
if (input.value.length >= 3) {
form.submit();
} else {
//jeżeli nie to pokazujemy jakieś błędy
alert("Kolego wypełniłeś błędnie nasz super formularz");
}
})Przy kilku polach można zbierać wyniki w tablicę. W poniższym kodzie zbieram tam teksty, które pojawią się w komunikacie błędu.
Równocześnie posługiwanie się okienkiem alert nie jest zalecanym rozwiązaniem. Okienko takie jest zbyt "inwazyjne" dla użytkownika, a poza tym nie mamy w ogóle możliwości zmiany jego wyglądu.
Powyższy kod moglibyśmy też rozbudować dodając dynamiczne reagowanie pól na stan wypełnienia za pomocą dodawania dodatkowej klasy is-invalid w momencie, gdy pole jest błędnie wypełnione.
W naszym kodzie testy powtarzają się w kilku miejscach. Warto tutaj dodać odpowiednie funkcje sprawdzające:
Last updated