Obiettivi
- Progettare form semantici e accessibili.
- Applicare la validazione nativa e via JavaScript.
- Ottimizzare UX e compatibilità mobile.
- Gestire sicurezza e privacy.
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 |
|---|---|---|
| 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.”