Come creare radio button in HTML
I radio button permettono al lettore di scegliere esattamente un'opzione da un gruppo. Ogni opzione è un <input type="radio">, ed è dare a tutti lo stesso name che li trasforma in un gruppo. Scegli una taglia e premi Order:
Il modulo invia una sola coppia, size=m: il name del gruppo e il value del pulsante selezionato. I pezzi:
- Lo stesso
namesu ogni pulsante del gruppo. Selezionarne uno deseleziona gli altri. - Un
valuediverso su ciascuno. È ciò che riceve il server. Un radio senzavalueinviaon, che al server non dice niente. checkedsull'opzione predefinita.- Un
<label>attorno a ciascuno, così il testo è cliccabile, e un<fieldset>con<legend>così gli screen reader annunciano la domanda ("Size") insieme a ogni opzione.
Il name crea il gruppo
I radio con nomi diversi sono gruppi separati, e ogni gruppo ha la sua selezione. Questo esempio ha due gruppi, più un insieme rotto in cui ogni radio ha per errore un nome suo:
Clicca tutti e tre nel gruppo rotto: restano tutti selezionati e nessuno si può più disattivare, il peggio di entrambi i mondi. I radio si raggruppano per name all'interno dello stesso modulo, quindi due moduli possono avere ciascuno il proprio gruppo name="size".
Gruppi obbligatori e nessun valore predefinito
required su un qualsiasi radio del gruppo significa che uno di essi deve essere selezionato prima che il modulo venga inviato. Lasciare fuori checked obbliga il lettore a scegliere attivamente, cosa giusta quando non c'è un valore predefinito sensato:
Premi Continue senza scegliere e il browser blocca l'invio con un messaggio. Appena scegli un'opzione qualsiasi, l'intero gruppo è valido. Un gruppo non selezionato e non obbligatorio non invia proprio niente, come una checkbox non spuntata.
Un clic può selezionare un radio ma mai deselezionarlo. Se dopo una scelta deve essere possibile "nessuna risposta", aggiungi un'opzione esplicita per quello.
Leggere il valore selezionato in JavaScript
form.elements.name restituisce l'intero gruppo, e il suo .value è il valore del radio selezionato (una stringa vuota quando non ce n'è nessuno). L'evento change scatta sul radio appena selezionato:
Il listener è sul modulo, quindi intercetta un cambiamento in uno qualsiasi dei suoi campi. Fuori da un modulo, trova il radio selezionato con document.querySelector('input[name="period"]:checked').
Comportamento da tastiera
Un gruppo di radio è una sola tappa nell'ordine del Tab. Tab entra nel gruppo, fermandosi sul radio selezionato (o, se nessuno è selezionato, sul primo), e i tasti freccia spostano la selezione tra le opzioni. Un altro Tab esce dal gruppo. Tutto questo è gratis con veri input radio che condividono un name, ed è un motivo in più per non ricostruire i radio con elementi <div>.
Dare uno stile ai radio button
accent-color cambia il colore del radio nativo. appearance: none ti permette di disegnare il tuo cerchio. E siccome un radio nascosto si può comunque selezionare tramite la sua etichetta, un gruppo può sembrare un insieme di schede mantenendo tutto il comportamento dei radio:
Il cerchio personalizzato è solo un bordo spesso quando è selezionato. Le schede nascondono l'input con opacity: 0 invece di display: none, così resta raggiungibile con il focus e i tasti freccia continuano a funzionare, e :has(input:checked) dà lo stile alla scheda selezionata. :has() funziona nelle versioni attuali di Chrome, Firefox e Safari.
Radio, checkbox o select?
| Usa | Quando |
|---|---|
| Radio button | Una scelta tra poche opzioni (da 2 a 6 circa) che devono essere tutte visibili |
| Checkbox | Un numero qualsiasi di scelte, anche nessuna |
Una <select> | Una scelta da una lista lunga, come i paesi (vedi select HTML) |
Errori comuni
namediversi in un gruppo. Ogni radio si può selezionare e nessuno si può annullare.- Nessun
value. Il server riceveonqualunque sia la scelta. - Nascondere l'input con
display: nonein un design personalizzato. Non riceve più il focus e non si usa più con la tastiera. - Nessun
<fieldset>e<legend>. Gli screen reader annunciano "Small, pulsante di opzione" senza una domanda a cui riferirlo. - Un solo radio button per una casella "Accetto". Non si può mai togliere la spunta; usa una checkbox.
checkedsu più radio dello stesso gruppo. Alla fine risulta selezionato solo l'ultimo.
Domande frequenti
Come si creano i radio button in HTML?
Scrivi un <input type="radio"> per ogni opzione, dai a tutti lo stesso name e un value diverso, e metti ciascuno in un <label>: <label><input type="radio" name="size" value="m"> Medium</label>. Il nome condiviso li unisce in un gruppo in cui se ne può selezionare solo uno.
Perché posso selezionare più di un radio button?
I pulsanti non hanno lo stesso name. I radio button formano un gruppo solo tramite un name identico (nello stesso modulo), e per ogni gruppo si può selezionare un solo pulsante.
Come leggo il valore del radio button selezionato in JavaScript?
Usa form.elements.size.value, dove size è il nome del gruppo; restituisce il valore del pulsante selezionato, o una stringa vuota se non ce n'è nessuno. Senza un modulo: document.querySelector('input[name="size"]:checked')?.value.
Come imposto un radio button predefinito?
Aggiungi checked a un pulsante del gruppo: <input type="radio" name="plan" value="free" checked>. Se ce l'hanno in più, vince l'ultimo.
Si può deselezionare un radio button?
Non cliccandolo; un clic seleziona e basta. Offri un'opzione "Nessuno", reimposta il modulo o imposta button.checked = false in JavaScript. Se la scelta deve essere facoltativa e annullabile, forse è più adatta una checkbox o una select.