<form>
Formularz, który zbiera dane od użytkownika i wysyła je pod wskazany adres.
- Wyświetlanie
- block
- Znacznik zamykający
- Wymagany
- Dozwolona zawartość
- Treść przepływu bez zagnieżdżonych elementów
<form>
Przykład
#<form action="/newsletter" method="post">
<p>
<label for="email">E-mail</label>
<input type="email" id="email" name="email" placeholder="ania@example.com" required>
</p>
<p>
<label>
<input type="checkbox" name="consent" required>
Chcę dostawać nowe lekcje na e-mail
</label>
</p>
<button type="submit">Zapisz się</button>
</form>Definicja i zastosowanie
#Element <form> łączy pola (<input>, <select>, <textarea>) i przyciski w jedną całość. Po kliknięciu przycisku wysyłającego albo naciśnięciu Enter w polu tekstowym przeglądarka zbiera wartości wszystkich pól z atrybutem name i wysyła je pod adres z atrybutu action.
Metoda get dopisuje dane do adresu strony (/szukaj?q=html), dlatego pasuje do wyszukiwarek i filtrów, które warto móc zapisać w zakładkach. Metoda post wysyła dane w treści żądania i jest właściwa dla logowania, rejestracji, zamówień i wszystkiego, co zmienia dane na serwerze.
Zanim formularz zostanie wysłany, przeglądarka sprawdza reguły zapisane w polach, takie jak required, type="email" czy minlength, i pokazuje komunikat przy pierwszym błędnym polu. Formularzy nie wolno zagnieżdżać, ale pole stojące poza formularzem możesz do niego przypisać atrybutem form="id-formularza".
Składnia
#<form action="/adres" method="post">
…
</form>Atrybuty
#URL
Adres, pod który trafią dane. Bez tego atrybutu formularz wysyła dane na adres bieżącej strony. Pojedynczy przycisk może nadpisać adres własnym atrybutemformaction.get | post | dialog
Sposób wysłania danych.get(domyślnie) dopisuje je do adresu jako parametry, więc po wysłaniu formularza z przykładu przeglądarka przejdzie pod/szukaj?q=….postwysyła dane w treści żądania. Wartośćdialogzamyka okno<dialog>, w którym stoi formularz, bez wysyłania czegokolwiek na serwer.application/x-www-form-urlencoded | multipart/form-data | text/plain
Format, w jakim dane trafią na serwer przy metodziepost. Domyślny format wystarcza dla zwykłych pól, ale formularz z polemtype="file"musi miećmultipart/form-data, inaczej zamiast pliku wyśle się tylko jego nazwa.atrybut logiczny
Wyłącza wbudowaną walidację przeglądarki przy wysyłaniu. Przydaje się, gdy sprawdzasz pola własnym kodem JavaScript i pokazujesz własne komunikaty. W przykładzie formularz nie zaprotestuje mimo błędnego adresu e-mail.target
_self | _blank | _parent | _top | nazwa
Gdzie otworzyć odpowiedź serwera po wysłaniu._blankotwiera ją w nowej karcie. Wartości działają tak samo jak w atrybucietargetodnośnika<a>.autocomplete
on | off
Domyślne ustawienie autouzupełniania dla wszystkich pól formularza. Pojedyncze pole może je nadpisać własnym atrybutemautocomplete. Przy polach logowania przeglądarki często ignorująoff, żeby menedżery haseł nadal działały.name
tekst
Nazwa formularza. Pozwala odwołać się do niego w JavaScripcie przezdocument.forms.nazwa.
Element obsługuje też wszystkie atrybuty globalne, takie jak class, id, style czy hidden.
Atrybuty w praktyce
#action
URLAdres, pod który trafią dane. Bez tego atrybutu formularz wysyła dane na adres bieżącej strony. Pojedynczy przycisk może nadpisać adres własnym atrybutem formaction.
<form action="/kontakt" method="post">
<label>Wiadomość <input type="text" name="message"></label>
<button>Wyślij</button>
</form>method
get | post | dialogSposób wysłania danych. get (domyślnie) dopisuje je do adresu jako parametry, więc po wysłaniu formularza z przykładu przeglądarka przejdzie pod /szukaj?q=…. post wysyła dane w treści żądania. Wartość dialog zamyka okno <dialog>, w którym stoi formularz, bez wysyłania czegokolwiek na serwer.
<form action="/szukaj" method="get">
<input type="search" name="q" placeholder="Szukaj w dokumentacji" aria-label="Szukaj w dokumentacji">
<button>Szukaj</button>
</form>enctype
application/x-www-form-urlencoded | multipart/form-data | text/plainFormat, w jakim dane trafią na serwer przy metodzie post. Domyślny format wystarcza dla zwykłych pól, ale formularz z polem type="file" musi mieć multipart/form-data, inaczej zamiast pliku wyśle się tylko jego nazwa.
<form action="/profil/avatar" method="post" enctype="multipart/form-data">
<label>Zdjęcie profilowe <input type="file" name="avatar" accept="image/*"></label>
<button>Wyślij</button>
</form>novalidate
atrybut logicznyWyłącza wbudowaną walidację przeglądarki przy wysyłaniu. Przydaje się, gdy sprawdzasz pola własnym kodem JavaScript i pokazujesz własne komunikaty. W przykładzie formularz nie zaprotestuje mimo błędnego adresu e-mail.
<form novalidate>
<input type="email" name="email" value="to-nie-jest-email" aria-label="E-mail">
<button>Wyślij mimo błędu</button>
</form>Domyślny CSS
#Większość przeglądarek wyświetla ten element z takimi stylami domyślnymi:
form {
display: block;
}Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Każde pole, którego wartość ma trafić na serwer, potrzebuje atrybutu
name. Pole bez nazwy nie zostanie wysłane. - Walidacja w przeglądarce to wygoda dla użytkownika, a nie zabezpieczenie. Serwer zawsze musi sprawdzić dane jeszcze raz.
- Przycisk bez atrybutu
typewewnątrz formularza domyślnie go wysyła. Przyciskom, które tylko coś robią na stronie, nadawajtype="button".
Powiązane hasła
#- <input>Pole formularza: tekst, e-mail, hasło, liczba, data, suwak, pole wyboru, plik i wiele innych.
- <label>Etykieta pola formularza. Kliknięcie etykiety przenosi kursor do pola.
- <button>Klikalny przycisk: wysyła formularz, czyści go albo uruchamia akcję na stronie.
- <fieldset>Grupa powiązanych pól formularza z ramką i podpisem `<legend>`.
- <select>Rozwijana lista, z której użytkownik wybiera jedną lub kilka opcji.
- <textarea>Wielowierszowe pole tekstowe na dłuższe wypowiedzi: wiadomości, opinie, opisy.
Widzisz błąd albo brakuje przykładu? Napisz do nas.