1️⃣ Origine e funzione dei form

I form rappresentano il cuore interattivo del Web: da semplici campi di input negli anni ’90 fino ai moduli dinamici con validazione in tempo reale. Permettono all’utente di comunicare, iscriversi, prenotare o personalizzare esperienze.

2️⃣ Struttura di base

<form action="/iscrizione" method="post">
  <label for="nome">Nome</label>
  <input id="nome" name="nome" type="text" required>

  <label for="email">Email</label>
  <input id="email" name="email" type="email" required>

  <button type="submit">Invia</button>
</form>

Parametri chiave:
action definisce la destinazione dei dati,
method specifica l’invio (GET o POST),
enctype gestisce il formato (utile per upload).

3️⃣ Tipi di input moderni

Visualizza tabella dei tipi HTML5
Tipo Scopo Esempio
email Verifica formato email <input type="email">
number Valori numerici <input type="number" min="0" max="10">
date Calendario <input type="date">
color Selettore colore <input type="color">
range Slider <input type="range" min="0" max="100">
file Carica file <input type="file" accept="image/*">

4️⃣ Accessibilità (A11y)

Ogni campo deve essere identificato da una <label> collegata, avere un messaggio d’aiuto e fornire un feedback chiaro.

<label for="email2">Email istituzionale</label>
<input id="email2" type="email" required aria-describedby="helpE">
<small id="helpE">Usa il dominio @liceomasci.edu.it</small>

Best practice:
Usa role="alert" e aria-live="polite" per errori dinamici; evita di sostituire la label con il placeholder.

5️⃣ Validazione

La validazione garantisce che i dati siano coerenti e sicuri. Può essere nativa (browser) o personalizzata (JavaScript).

Esempio di validazione personalizzata
<input id="cf" required pattern="^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$">
<script>
const c = document.querySelector('#cf');
c.addEventListener('input', () => {
  const ok = c.checkValidity();
  c.setCustomValidity(ok ? '' : 'Codice fiscale non valido');
});
</script>

6️⃣ Sicurezza e privacy

  • Usa sempre HTTPS.
  • Per dati personali → method="post".
  • Chiedi solo ciò che serve.
  • Richiedi consenso esplicito.
<label>
  <input type="checkbox" required>
  Ho letto e accetto l’informativa privacy.
</label>

7️⃣ UX e design dell’interazione

Un form usabile è chiaro, leggibile e prevedibile. Evita errori frustranti, fornisci feedback visivo e mantieni coerenza cromatica.

input:valid {border:2px solid #2ea44f;}
input:invalid {border:2px solid #d93025;}

8️⃣ Microinterazioni e salvataggio automatico

Codice LocalStorage
<script>
const f = document.querySelector('form');
f.addEventListener('input', () => {
  localStorage.setItem('bozzaForm', JSON.stringify(Object.fromEntries(new FormData(f))));
});
window.addEventListener('DOMContentLoaded', () => {
  const data = JSON.parse(localStorage.getItem('bozzaForm') || '{}');
  for (let [k,v] of Object.entries(data)) if (f.elements[k]) f.elements[k].value = v;
});
</script>

9️⃣ Laboratorio: iscrizione al laboratorio di informatica

Richieste: Nome, Cognome, Email istituzionale, Classe (select), Giorni disponibili (checkbox), Note, Consenso privacy.
Validazione con pattern e feedback visivo.

<form id="lab">
  <label>Nome <input name="nome" required></label>
  <label>Email <input type="email" pattern="^[a-z0-9._%+-]+@liceomasci\.edu\.it$" required></label>
  <select name="classe" required>
    <option>3A</option><option>4A</option><option>5A</option>
  </select>
  <textarea name="note" rows="3"></textarea>
  <label><input type="checkbox" required> Accetto la privacy</label>
  <button type="submit">Invia</button>
</form>

🔟 Riflessione finale

Un form efficace non è solo codice: è un atto di comunicazione che unisce chiarezza, fiducia e responsabilità.
Ogni campo è un punto di contatto tra l’utente e la conoscenza.

Un form perfetto è quello che “scompare” mentre lo si usa: intuitivo, sicuro, e pensato per l’essere umano.


Prossimo modulo → “CSS avanzato per form: layout, dark mode e micro-UX.”