Moduli HTML: gestione pratica di input, textarea, select, checkbox e radio

by Anastasia P.
SHARE
Moduli HTML: gestione pratica di input, textarea, select, checkbox e radio
© Guida-HTML5.it

Introduzione

I moduli HTML sono il punto di contatto tra l’utente e l’applicazione: servono per raccogliere dati, inviare preferenze, compilare richieste e gestire interazioni semplici ma fondamentali. In questo tutorial ci concentriamo su un sotto-argomento molto utile e concreto: come progettare un modulo completo per una richiesta di assistenza tecnica, usando in modo corretto input, textarea, select, checkbox e radio.

Questo scenario è ideale perché tocca tutti i controlli principali dei moduli HTML e mostra come combinarli in modo leggibile, accessibile e facile da validare lato server. L’obiettivo non è solo “far funzionare” il form, ma costruire una struttura chiara per l’utente e robusta per chi sviluppa.

Codice completo

<form action="/richiesta-assistenza" method="post">
  <h2>Richiesta assistenza tecnica</h2>

  <p>
    <label for="nome">Nome e cognome</label><br>
    <input type="text" id="nome" name="nome" required>
  </p>

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

  <p>
    <label for="telefono">Telefono</label><br>
    <input type="tel" id="telefono" name="telefono" placeholder="+39 333 1234567">
  </p>

  <p>
    <label for="categoria">Categoria del problema</label><br>
    <select id="categoria" name="categoria" required>
      <option value="">Seleziona una categoria</option>
      <option value="account">Accesso all´account</option>
      <option value="pagamento">Pagamento</option>
      <option value="bug">Errore tecnico</option>
      <option value="altro">Altro</option>
    </select>
  </p>

  <p>
    <strong>Priorità della richiesta</strong><br>
    <input type="radio" id="priorita-bassa" name="priorita" value="bassa" checked>
    <label for="priorita-bassa">Bassa</label><br>

    <input type="radio" id="priorita-media" name="priorita" value="media">
    <label for="priorita-media">Media</label><br>

    <input type="radio" id="priorita-alta" name="priorita" value="alta">
    <label for="priorita-alta">Alta</label>
  </p>

  <p>
    <strong>Servizi coinvolti</strong><br>
    <input type="checkbox" id="servizio-web" name="servizi[]" value="web">
    <label for="servizio-web">Area web</label><br>

    <input type="checkbox" id="servizio-app" name="servizi[]" value="app">
    <label for="servizio-app">App mobile</label><br>

    <input type="checkbox" id="servizio-email" name="servizi[]" value="email">
    <label for="servizio-email">Email marketing</label>
  </p>

  <p>
    <label for="descrizione">Descrizione del problema</label><br>
    <textarea id="descrizione" name="descrizione" rows="6" cols="40" required></textarea>
  </p>

  <p>
    <input type="checkbox" id="privacy" name="privacy" required>
    <label for="privacy">Acconsento al trattamento dei dati personali</label>
  </p>

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

Spiegazione

1. La struttura del form

Il tag <form> contiene tutti i campi che verranno inviati al server. Gli attributi più importanti sono:

  • action: indica l’URL a cui inviare i dati.
  • method: definisce il metodo HTTP, in questo caso post, adatto per inviare dati in modo più sicuro e ordinato.

In un modulo reale, scegliere bene action e method è fondamentale per integrare correttamente frontend e backend.

2. Input di testo, email e telefono

Il controllo input è il più versatile. Nel nostro esempio usiamo tre tipi diversi:

  • type="text" per nome e cognome.
  • type="email" per richiedere un formato email valido.
  • type="tel" per un numero di telefono.

L’attributo required rende obbligatorio il campo. Questo è utile per una validazione di base lato browser, ma non sostituisce mai la validazione lato server.

3. Select per una scelta singola ben definita

Il tag <select> è perfetto quando vuoi offrire un elenco chiuso di opzioni. Nel caso della categoria del problema, l’utente può scegliere solo una voce tra quelle disponibili.

Notare il primo <option value="">: funge da segnaposto iniziale. In combinazione con required, aiuta a evitare che venga inviata una scelta non significativa.

4. Radio per opzioni mutualmente esclusive

I pulsanti radio servono quando l’utente deve selezionare una sola opzione tra più alternative. Nel nostro esempio la priorità può essere bassa, media o alta.

La regola più importante è questa: tutti i radio che appartengono allo stesso gruppo devono avere lo stesso name. In questo modo il browser capisce che solo uno può essere selezionato alla volta.

Abbiamo anche usato checked su “Bassa” per impostare un valore predefinito. È una scelta utile quando esiste un’opzione comune o sicura da proporre inizialmente.

5. Checkbox per selezioni multiple

Le checkbox sono ideali quando l’utente può selezionare più elementi contemporaneamente. Nel nostro esempio il cliente può indicare uno o più servizi coinvolti.

Un dettaglio importante è il nome servizi[]: la sintassi con parentesi quadre segnala che il campo può inviare un array di valori. Questa convenzione è molto usata nei backend moderni e facilita la gestione di più selezioni.

6. Textarea per descrizioni lunghe

Quando il contenuto da inserire è esteso, textarea è la scelta corretta. A differenza di input text, consente di scrivere testi multilinea, ad esempio descrizioni di bug, richieste dettagliate o note aggiuntive.

Gli attributi rows e cols definiscono una dimensione iniziale visiva, ma non il limite del contenuto. Sono utili per migliorare l’esperienza utente, soprattutto su moduli di supporto o segnalazione.

7. Label e accessibilità

Ogni campo ha una <label> associata tramite l’attributo for, che corrisponde all’id del controllo. Questa è una best practice fondamentale: migliora l’accessibilità, aumenta l’area cliccabile e rende il form più comodo anche su dispositivi mobili.

Per radio e checkbox, è particolarmente importante associare correttamente ogni etichetta al relativo input, così l’interazione risulta più naturale.

Best practice

  • Usa sempre label esplicite: evita form difficili da leggere o da usare con screen reader.
  • Scegli il tipo di input corretto: email, tel, text e altri tipi migliorano la semantica e possono attivare validazioni native.
  • Non abusare di select: se le opzioni sono poche e chiare, radio può essere più immediato; se sono molte, select è più compatto.
  • Raggruppa bene i controlli: per radio e checkbox usa una struttura visiva coerente, così l’utente capisce subito cosa può selezionare.
  • Non affidarti solo al browser: la validazione HTML è utile, ma i dati vanno sempre controllati lato server.
  • Usa placeholder con criterio: servono come aiuto temporaneo, non devono sostituire le label.
  • Imposta valori predefiniti con attenzione: un radio già selezionato o una checkbox obbligatoria devono avere senso nel contesto.

Riepilogo

In questo tutorial abbiamo costruito un modulo HTML realistico per una richiesta di assistenza tecnica, utilizzando in modo coordinato i principali controlli di form:

  • input per dati brevi come nome, email e telefono;
  • select per una scelta singola da elenco;
  • radio per opzioni esclusive come la priorità;
  • checkbox per selezioni multiple come i servizi coinvolti;
  • textarea per descrizioni più lunghe e dettagliate.

Il punto chiave non è solo la sintassi, ma la progettazione: un modulo ben fatto guida l’utente, riduce gli errori e semplifica il lavoro di chi gestisce i dati lato applicazione.

Approfondisci con risorse ufficiali

  • MDN Web Docs - HTML forms: documentazione completa e affidabile sui moduli HTML.
  • MDN Web Docs - <input>: panoramica dettagliata sui diversi tipi di input.
  • MDN Web Docs - <textarea>: uso corretto del campo di testo multilinea.
  • MDN Web Docs - <select>: opzioni, gruppi e comportamento del menu a tendina.
  • WHATWG HTML Standard: specifica ufficiale del linguaggio HTML.

Se vuoi, nel prossimo passo posso trasformare questo esempio in una versione più accessibile, oppure aggiungere validazione HTML5 e una breve gestione JavaScript dei dati inviati.

SHARE