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:

  1. 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ć

  2. 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ę.

  3. 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