<input type="radio">

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

<input>-Elemente des Typs radio werden im Allgemeinen in Radiogruppen verwendet – Sammlungen von Optionsfeldern, die eine Reihe verwandter Optionen beschreiben.

In einer bestimmten Gruppe kann jeweils nur ein Optionsfeld ausgewählt werden. Optionsfelder werden typischerweise als kleine Kreise dargestellt, die gefüllt oder hervorgehoben sind, wenn sie ausgewählt werden.

Probieren Sie es aus

Sie werden als Optionsfelder bezeichnet, weil sie ähnlich aussehen und funktionieren wie die Drucktasten auf altmodischen Radios, wie das unten gezeigte.

Zeigt, wie Optionsfelder in früheren Zeiten aussahen.

Hinweis: Checkboxen ähneln Optionsfeldern, es gibt jedoch einen wichtigen Unterschied: Optionsfelder sind für die Auswahl eines Wertes aus einer Menge konzipiert, während Checkboxen es ermöglichen, einzelne Werte ein- und auszuschalten. Wo mehrere Steuerungen existieren, erlaubt das Optionsfeld, dass eines davon ausgewählt wird, während Checkboxen die Auswahl mehrerer Werte ermöglichen.

Wert

Das value-Attribut ist eine Zeichenkette, die den Wert des Optionsfeldes enthält. Der Wert wird dem Benutzer durch deren User-Agent nie angezeigt. Stattdessen wird es verwendet, um zu kennzeichnen, welches Optionsfeld in einer Gruppe ausgewählt ist.

Definition einer Radiogruppe

Eine Radiogruppe wird definiert, indem jedem Optionsfeld in der Gruppe derselbe name zugewiesen wird. Sobald eine Radiogruppe festgelegt ist, hebt die Auswahl eines beliebigen Optionsfeldes in dieser Gruppe automatisch die Auswahl jedes derzeit ausgewählten Optionsfeldes in derselben Gruppe auf.

Sie können auf einer Seite beliebig viele Radiogruppen haben, solange jede einen eindeutigen name hat.

Zum Beispiel, wenn Ihr Formular den Benutzer nach seiner bevorzugten Kontaktmethode fragt, könnten Sie drei Optionsfelder erstellen, jedes mit der Eigenschaft name auf contact gesetzt, aber eines mit dem Wert email, eines mit dem Wert phone und eines mit dem Wert mail. Der Benutzer sieht weder den value noch den name (es sei denn, Sie fügen ausdrücklich Code hinzu, um dies anzuzeigen).

Das resultierende HTML sieht so aus:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input type="radio" id="contactChoice1" name="contact" value="email" />
      <label for="contactChoice1">Email</label>

      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>

      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>

Hier sehen Sie die drei Optionsfelder, jedes mit dem name auf contact gesetzt und jedes mit einem einzigartigen value, der dieses einzelne Optionsfeld innerhalb der Gruppe eindeutig kennzeichnet. Sie haben auch alle eine einzigartige id, die vom <label>-Element über das for-Attribut verwendet wird, um die Labels mit den Optionsfeldern zu verknüpfen.

Sie können dieses Beispiel hier ausprobieren:

Datenrepräsentation einer Radiogruppe

Wenn das obige Formular mit einem ausgewählten Optionsfeld übermittelt wird, enthält die Formular-Daten einen Eintrag im Formular contact=value. Zum Beispiel, wenn der Benutzer das Optionsfeld "Phone" auswählt und dann das Formular absendet, enthalten die Formular-Daten die Zeile contact=phone.

Wenn Sie das value-Attribut im HTML weglassen, weist die übermittelten Formulardaten der Gruppe den Wert on zu. In diesem Szenario, wenn der Benutzer auf die Option "Phone" klickt und das Formular übermittelt, lauten die resultierenden Formulardaten contact=on, was nicht hilfreich ist. Vergessen Sie also nicht, Ihre value-Attribute festzulegen!

Hinweis: Wenn kein Optionsfeld ausgewählt ist, wenn das Formular abgesendet wird, wird die Radiogruppe überhaupt nicht in die übermittelten Formulardaten aufgenommen, da kein Wert gemeldet werden kann.

Es ist ziemlich unüblich, tatsächlich zuzulassen, dass das Formular abgesendet wird, ohne dass eines der Optionsfelder in einer Gruppe ausgewählt ist, daher ist es gewöhnlich sinnvoll, eines standardmäßig im checked-Status zu haben. Siehe Automatische Auswahl eines Optionsfeldes unten.

Lassen Sie uns unserem Beispiel etwas Code hinzufügen, damit wir die von diesem Formular generierten Daten genauer untersuchen können. Das HTML wird überarbeitet, um einen <pre>-Block zur Ausgabe der Formulardaten hinzuzufügen:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input type="radio" id="contactChoice1" name="contact" value="email" />
      <label for="contactChoice1">Email</label>
      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>
      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>
<pre id="log"></pre>

Anschließend fügen wir etwas JavaScript hinzu, um einen Event-Listener auf das submit-Ereignis einzurichten, das gesendet wird, wenn der Benutzer auf die Schaltfläche "Submit" klickt:

js
const form = document.querySelector("form");
const log = document.querySelector("#log");

form.addEventListener(
  "submit",
  (event) => {
    const data = new FormData(form);
    let output = "";
    for (const entry of data) {
      output = `${output}${entry[0]}=${entry[1]}\r`;
    }
    log.innerText = output;
    event.preventDefault();
  },
  false,
);

Probieren Sie dieses Beispiel aus und sehen Sie, dass es nie mehr als ein Ergebnis für die contact-Gruppe gibt.

Zusätzliche Attribute

Zusätzlich zu den gemeinsamen Attributen, die alle <input>-Elemente teilen, unterstützen radio-Eingabefelder die folgenden Attribute.

checked

Ein boolesches Attribut, das, falls vorhanden, angibt, dass dieses Optionsfeld das standardmäßig ausgewählte in der Gruppe ist.

Anders als in anderen Browsern behält Firefox standardmäßig den dynamischen checked-Zustand eines <input> über Seitenladevorgänge hinweg bei. Verwenden Sie das autocomplete-Attribut, um diese Funktion zu steuern.

value

Das value-Attribut wird von allen <input>s geteilt; es erfüllt jedoch einen speziellen Zweck für Eingabefelder des Typs radio: Wenn ein Formular gesendet wird, werden nur die derzeit markierten Optionsfelder an den Server übermittelt, und der gemeldete Wert ist der Wert des value-Attributs. Wenn das value nicht anders angegeben ist, ist es standardmäßig die Zeichenkette on. Dies wird im Abschnitt Wert oben demonstriert.

required

Das required-Attribut wird von den meisten <input>s geteilt. Wenn ein Optionsfeld in einer Gruppe von Optionsfeldern mit demselben Namen das required-Attribut hat, muss ein Optionsfeld in dieser Gruppe markiert sein, obwohl es nicht dasjenige mit dem angewendeten Attribut sein muss.

Verwendung von Radio-Eingaben

Wir haben bereits die Grundlagen von Optionsfeldern oben behandelt. Schauen wir uns nun die anderen gängigen Funktionen und Techniken an, die Sie über Optionsfelder wissen müssen.

Automatische Auswahl eines Optionsfeldes

Um ein Optionsfeld standardmäßig auszuwählen, fügen Sie das checked-Attribut hinzu, wie in dieser überarbeiteten Version des vorherigen Beispiels gezeigt:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input
        type="radio"
        id="contactChoice1"
        name="contact"
        value="email"
        checked />
      <label for="contactChoice1">Email</label>

      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>

      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>

In diesem Fall ist das erste Optionsfeld jetzt standardmäßig ausgewählt.

Hinweis: Wenn Sie das checked-Attribut auf mehr als ein Optionsfeld setzen, werden spätere Instanzen frühere überschreiben; das heißt, das letzte checked-Optionsfeld wird das ausgewählte sein. Dies liegt daran, dass in einer Gruppe immer nur ein Optionsfeld ausgewählt werden kann, und der User-Agent andere automatisch abwählt, sobald ein neues als ausgewählt markiert wird.

Bereitstellen eines größeren Trefferbereichs für Ihre Optionsfelder

In den obigen Beispielen haben Sie möglicherweise bemerkt, dass Sie ein Optionsfeld durch Klicken auf das zugehörige <label>-Element auswählen können, ebenso wie auf das Optionsfeld selbst. Dies ist eine wirklich nützliche Funktion von HTML-Formularlabels, die es Benutzern erleichtert, die gewünschte Option auszuwählen, insbesondere auf Geräten mit kleinem Bildschirm wie Smartphones.

Neben der Barrierefreiheit ist dies ein weiterer guter Grund, <label>-Elemente ordnungsgemäß in Ihren Formularen einzurichten.

Validierung

Im Fall eines Optionsfeldes mit dem gesetzten required-Attribut oder einer Gruppe von Optionsfeldern mit demselben Namen, in der mindestens ein Mitglied required gesetzt hat, muss ein Optionsfeld ausgewählt sein, damit die Steuerung als gültig angesehen wird. Wenn kein Optionsfeld markiert ist, wird die valueMissing-Eigenschaft eines ValidityState-Objekts bei der Validierung true zurückgeben und der Browser wird den Benutzer bitten, eine Option auszuwählen.

Styling von Radio-Eingaben

Das folgende Beispiel zeigt eine etwas umfassendere Version des Beispiels, das wir im gesamten Artikel gesehen haben, mit zusätzlichem Styling und besserer Semantik, die durch die Verwendung spezialisierter Elemente hergestellt wird. Das HTML sieht so aus:

html
<form>
  <fieldset>
    <legend>Please select your preferred contact method:</legend>
    <div>
      <input
        type="radio"
        id="contactChoice1"
        name="contact"
        value="email"
        checked />
      <label for="contactChoice1">Email</label>

      <input type="radio" id="contactChoice2" name="contact" value="phone" />
      <label for="contactChoice2">Phone</label>

      <input type="radio" id="contactChoice3" name="contact" value="mail" />
      <label for="contactChoice3">Mail</label>
    </div>
    <div>
      <button type="submit">Submit</button>
    </div>
  </fieldset>
</form>

Das in diesem Beispiel verwendete CSS ist etwas umfangreicher:

css
html {
  font-family: sans-serif;
}

div:first-of-type {
  display: flex;
  align-items: flex-start;
  margin-bottom: 5px;
}

label {
  margin-right: 15px;
  line-height: 32px;
}

input {
  appearance: none;

  border-radius: 50%;
  width: 16px;
  height: 16px;

  border: 2px solid #999;
  transition: 0.2s all linear;
  margin-right: 5px;

  position: relative;
  top: 4px;
}

input:checked {
  border: 6px solid black;
}

button,
legend {
  color: white;
  background-color: black;
  padding: 5px 10px;
  border-radius: 0;
  border: 0;
  font-size: 14px;
}

button:hover,
button:focus {
  color: #999;
}

button:active {
  background-color: white;
  color: black;
  outline: 1px solid black;
}

Am bemerkenswertesten ist hier die Verwendung der appearance-Eigenschaft (mit Präfixen, die zur Unterstützung einiger Browser erforderlich sind). Standardmäßig werden Optionsfelder (und Checkboxen) mit den nativen Stilen des Betriebssystems für diese Steuerungen gestylt. Durch die Angabe von appearance: none können Sie das native Styling vollständig entfernen und Ihre eigenen Stile dafür erstellen. Hier haben wir eine border zusammen mit border-radius und eine transition verwendet, um eine schöne animierte Optionsfeldauswahl zu erstellen. Beachten Sie auch, wie die :checked-Pseudo-Klasse verwendet wird, um die Stile für das Erscheinungsbild des Optionsfeldes bei Auswahl zu spezifizieren.

Hinweis: Wenn Sie die appearance-Eigenschaft verwenden möchten, sollten Sie sie sehr sorgfältig testen. Obwohl sie in den meisten modernen Browsern unterstützt wird, variiert ihre Implementierung stark. In älteren Browsern hat selbst das Schlüsselwort none nicht in allen Browsern die gleiche Wirkung, und einige unterstützen es überhaupt nicht. Die Unterschiede sind in den neuesten Browsern kleiner.

Beachten Sie, dass es beim Klicken auf ein Optionsfeld einen schönen, sanften Aus- und Einblendeffekt gibt, wenn die beiden Schaltflächen den Zustand wechseln. Darüber hinaus sind der Stil und die Färbung der Legende und der Absendeschaltfläche so angepasst, dass sie einen starken Kontrast aufweisen. Dies ist möglicherweise nicht das Erscheinungsbild, das Sie in einer echten Webanwendung haben möchten, aber es zeigt definitiv die Möglichkeiten auf.

Technische Zusammenfassung

Wert Eine Zeichenkette, die den Wert des Optionsfeldes darstellt.
Ereignisse [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event)
Unterstützte gemeinsame Attribute checked, value und required
IDL-Attribute checked und value
DOM-Schnittstelle

[`HTMLInputElement`](/de/docs/Web/API/HTMLInputElement)

Methoden [`select()`](/de/docs/Web/API/HTMLInputElement/select)
Implizite ARIA-Rolle radio

Spezifikationen

Specification
HTML Standard
# radio-button-state-(type=radio)

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch