Tutti i componenti

Form contatto con validazione accessibile

Un form compatto per contatti o richieste: label esplicite, errori collegati ai campi, validazione lato client, stato di invio e messaggio finale dentro una regione annunciabile.

Demo form

Invio simulato: prova campi vuoti, email non valida e messaggio troppo breve.

Validation Errors Status

Richiesta progetto

Raccogli dati utili senza lasciare l'utente nel dubbio.

Ogni errore ha un testo dedicato e resta associato al campo tramite aria-describedby.

Quando usarlo

Per contatti, preventivi, iscrizioni brevi o qualunque flusso dove il feedback sui campi conta davvero.

Cosa risolve

Evita errori generici e stati invisibili: ogni campo comunica chiaramente cosa manca e cosa è valido.

Come adattarlo

Collega il submit alla tua API o a un servizio form. La demo mantiene separati markup, stile e validazione.

Guida alla creazione di Form di Contatto accessibili con validazione real-time

I form di contatto rappresentano il canale di comunicazione principale tra gli utenti e un'applicazione web. Una validazione dei dati mal progettata o inaccessibile è una delle cause primarie di frustrazione per l'utente, portando spesso all'abbandono della compilazione. Per questo motivo, una corretta implementazione deve combinare la validazione lato client (per un feedback immediato) con una struttura HTML robusta che rispetti le linee guida sull'accessibilità (WCAG).

Il nostro form utilizza etichette esplicite tramite il tag <label> collegate direttamente ai rispettivi campi di input tramite l'attributo for. Questo garantisce che, cliccando sull'etichetta, il focus venga trasferito al campo di testo e che gli screen reader leggano correttamente il nome del campo quando l'utente vi naviga. La validazione in tempo reale controlla la correttezza del formato (ad esempio per l'email) o la lunghezza minima dei testi al momento della digitazione o della perdita del focus (evento blur).

La gestione degli errori è l'aspetto più critico: quando un campo non è valido, l'attributo aria-invalid viene impostato su true e l'ID del messaggio di errore specifico viene associato al campo tramite aria-describedby. In questo modo, l'utente che utilizza uno screen reader riceve immediatamente la lettura dell'errore non appena si sposta sul campo interessato. Infine, lo stato di invio e il messaggio di successo finale vengono inseriti in un contenitore con l'attributo role="status" o aria-live="polite", garantendo che l'esito dell'operazione venga annunciato all'utente senza bisogno di ricaricare la pagina o spostare forzatamente il focus.

FAQ rapide sui form validati

Come funziona il collegamento tra messaggi di errore e campi di input?

Viene utilizzato l'attributo aria-describedby sull'input, il cui valore corrisponde all'ID del paragrafo contenente l'errore. Questo crea un legame semantico che i software di lettura vocale leggono automaticamente quando l'input riceve il focus.

È necessaria la validazione lato server se è già presente quella client?

Sì, la validazione lato client serve a migliorare l'esperienza utente offrendo feedback immediato, ma può essere facilmente aggirata (ad esempio disattivando JavaScript o inviando richieste HTTP dirette). La validazione lato server è sempre obbligatoria per ragioni di sicurezza e integrità dei dati.

Posso personalizzare i messaggi d'errore nativi del browser?

Sì, disattivando la validazione nativa tramite l'attributo novalidate sul tag <form> e gestendo i messaggi personalizzati tramite JavaScript, come mostrato in questo componente. Ciò consente di mantenere il controllo completo sul design visivo e sul tono di voce degli errori.