webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
HTML · Lecția 2 din 4

Formulare

Inputuri, label-uri și validare fără JavaScript.

Actualizat

Ce este un formular

Un formular colectează date de la user și le trimite undeva (server, funcție). E cel mai vechi mecanism interactiv al web-ului și funcționează fără JavaScript: browserul știe singur să adune valorile și să le trimită.

<form action="/subscribe" method="post">
  <label for="email">Email</label>
  <input id="email" name="email" type="email" required />
  <button type="submit">Trimite</button>
</form>

La submit, browserul construiește un request cu email=ana@x.ro și îl trimite la /subscribe. În Next, action poate fi direct o Server Action.

Piesele unui formular

Atribut / element Rol
action unde se trimit datele
method get (date în URL — pentru căutări) sau post (în body — pentru modificări)
name cheia sub care ajunge valoarea; fără name, câmpul nu se trimite
<label for> eticheta legată de id-ul inputului
<button type="submit"> trimite formularul

<button> într-un form are implicit type="submit". Butoanele care nu trimit (deschid un modal, șterg un rând) primesc type="button".

Tipuri de input — și când le folosești

Tip Când Bonus gratis
text text liber scurt —
email adresă de email validare format, tastatură cu @ pe mobil
password parolă caractere ascunse, manager de parole
number cantități săgeți, min/max/step
tel telefon tastatură numerică pe mobil (fără validare)
url link validare format
date, time dată / oră selector nativ
search căutare buton de ștergere
checkbox da/nu sau mai multe opțiuni —
radio o singură opțiune dintr-un grup (același name) navigare cu săgeți
file upload accept="image/*"
hidden valoare trimisă, dar invizibilă (id, token) —

Alte controale: <textarea> (text lung), <select> + <option> (listă), <fieldset> + <legend> (grup de câmpuri înrudite).

checkbox vs radio vs select: o alegere din 2–5 opțiuni vizibile → radio; o alegere din multe → select; mai multe alegeri → checkbox-uri.

Validare nativă

Atribut Efect
required obligatoriu
minlength / maxlength lungime text
min / max / step numere, date
pattern expresie regulată
type formatul (email, url)

Stilizezi starea cu :invalid, :valid, :user-invalid (doar după ce userul a interacționat).

Validarea din browser e pentru confortul userului, nu pentru securitate. Oricine o poate ocoli → validezi mereu și pe server.

Citirea datelor în JS

form.addEventListener('submit', e => {
  e.preventDefault()
  const data = Object.fromEntries(new FormData(e.currentTarget))
})

FormData citește toate câmpurile cu name — același obiect pe care îl primește o Server Action. Cum lucrezi cu formulare în React (controlled, React Hook Form, Zod) — în tema Formulare.

Greșeli frecvente

  • Input fără name → valoarea dispare la submit.
  • Input fără label (doar placeholder) → inaccesibil și dispare la tastare.
  • Butoane fără type care trimit formularul din greșeală.
  • Validare doar pe client.

Pe scurt

  • name decide ce se trimite, label for + id leagă eticheta.
  • Tipul corect de input = validare + tastatură potrivită, gratis.
  • Validează și pe server, mereu.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.