<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 gegebenen Gruppe kann nur ein Optionsfeld gleichzeitig ausgewählt werden. Optionsfelder werden typischerweise als kleine Kreise dargestellt, die gefüllt oder hervorgehoben werden, wenn sie ausgewählt sind.

Probieren Sie es aus

<fieldset>
  <legend>Select a maintenance drone:</legend>

  <div>
    <input type="radio" id="huey" name="drone" value="huey" checked />
    <label for="huey">Huey</label>
  </div>

  <div>
    <input type="radio" id="dewey" name="drone" value="dewey" />
    <label for="dewey">Dewey</label>
  </div>

  <div>
    <input type="radio" id="louie" name="drone" value="louie" />
    <label for="louie">Louie</label>
  </div>
</fieldset>
p,
label {
  font:
    1rem "Fira Sans",
    sans-serif;
}

input {
  margin: 0.4rem;
}

Sie werden Radiobuttons genannt, weil sie ähnlich funktionieren wie die Drucktasten alter Radios, wie das unten gezeigte.

Zeigt, wie Radioknöpfe früher aussahen.

Hinweis:>Checkboxen sind ähnlich wie Radioknöpfe, aber mit einem wichtigen Unterschied: Radioknöpfe sind dafür ausgelegt, einen Wert aus einer Menge auszuwählen, während Checkboxen es erlauben, einzelne Werte ein- und auszuschalten. Wo mehrere Steuerungen existieren, erlauben Radioknöpfe, einen aus allen auszuwählen, während Checkboxen mehrere Werte gleichzeitig erlauben.

Wert

Das value-Attribut ist ein Zeichenfolgenwert, der den Wert eines Radioknopfes enthält. Der Wert wird dem Benutzer nie durch ihr User-Agent angezeigt. Stattdessen wird er verwendet, um zu identifizieren, welcher Radioknopf in einer Gruppe ausgewählt ist.

Definieren einer Radiogruppe

Eine Radiogruppe wird definiert, indem jedem Radioknopf in der Gruppe derselbe name zugewiesen wird. Sobald eine Radiogruppe eingerichtet ist, wird durch das Auswählen eines Radioknopfes in dieser Gruppe automatisch jeder aktuell ausgewählte Radioknopf in derselben Gruppe deselektiert.

Sie können so viele Radiogruppen auf einer Seite haben, wie Sie möchten, solange jede ihren eigenen eindeutigen name hat.

Zum Beispiel, wenn Ihr Formular den Benutzer nach ihrer bevorzugten Kontaktmethode fragen muss, könnten Sie drei Radioknöpfe erstellen, jeder mit der name-Eigenschaft auf contact gesetzt, aber einer mit dem Wert email, einer mit dem Wert phone und einer mit dem Wert mail. Der Benutzer sieht weder den value noch den name (es sei denn, Sie fügen ausdrücklich Code hinzu, um ihn anzuzeigen).

Das resultierende HTML sieht folgendermaßen 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 Radioknöpfe, jeder mit dem name auf contact gesetzt und jeder mit einem eindeutigen value, der diesen individuellen Radioknopf innerhalb der Gruppe eindeutig identifiziert. Sie haben auch alle ein eindeutiges id, das vom <label>-Element verwendet wird, um die Labels mit den Radioknöpfen über das for-Attribut zu verknüpfen.

Sie können dieses Beispiel hier ausprobieren:

Datenrepräsentation einer Radiogruppe

Wenn das obige Formular mit einem ausgewählten Radioknopf abgesendet wird, enthält die Formulardaten einen Eintrag im Form contact=value. Beispielsweise, wenn der Benutzer auf den Radioknopf "Phone" klickt und das Formular absendet, enthalten die Formulardaten die Zeile contact=phone.

Wenn Sie das value-Attribut im HTML weglassen, weist die übermittelte Formulardaten der Gruppe den Wert on zu. In diesem Szenario, wenn der Benutzer die Option "Phone" anklickt und das Formular absendet, wären die resultierenden Formulardaten contact=on, was nicht hilfreich ist. Vergessen Sie also nicht, Ihre value-Attribute zu setzen!

Hinweis: Wenn kein Radioknopf ausgewählt ist, wenn das Formular gesendet wird, wird die Radiogruppe überhaupt nicht in die gesendeten Formulardaten aufgenommen, da es keinen zu berichtenden Wert gibt.

Es ist ziemlich ungewöhnlich, das Formular tatsächlich ohne ein ausgewähltes Radioknopf abzusenden, daher ist es im Allgemeinen ratsam, ein Standardauswahl auf den checked-Zustand zu setzen. Sehen Sie Auswahl eines Radioknopfes als Standard weiter unten.

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

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>

Dann fügen wir etwas JavaScript hinzu, um einen Event-Listener für das submit-Ereignis einzurichten, das gesendet wird, wenn der Benutzer auf den "Submit"-Button 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,
);

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

Zusätzliche Attribute

Zusätzlich zu den allgemeinen Attributen, die alle <input>-Elemente gemeinsam nutzen, unterstützen radio-Eingaben die folgenden Attribute.

checked

Ein Boolean-Attribut, das, falls vorhanden, angibt, dass dieser Radioknopf der standardmäßig ausgewählte in der Gruppe ist.

Im Gegensatz zu anderen Browsern speichert Firefox standardmäßig den dynamischen Checked-Zustand eines <input> über Seitenladevorgänge hinweg. Verwenden Sie das autocomplete-Attribut, um diese Funktion zu steuern.

value

Das value-Attribut ist eines, das alle <input>s gemeinsam haben; es hat jedoch einen speziellen Zweck für Eingaben des Typs radio: Wenn ein Formular gesendet wird, werden nur Radioknöpfe, die derzeit ausgewählt sind, an den Server übermittelt, und der gemeldete Wert ist der Wert des value-Attributs. Wenn der value nicht anders angegeben ist, ist dies standardmäßig die Zeichenfolge on. Dies wird im Abschnitt Wert oben demonstriert.

required

Das required-Attribut ist eines, das die meisten <input>s gemeinsam haben. Wenn ein Radioknopf in einer gleichnamigen Gruppe von Radioknöpfen das required-Attribut hat, muss ein Radioknopf in dieser Gruppe ausgewählt werden, obwohl es nicht der sein muss, auf den das Attribut angewendet wurde.

Verwendung von Radio-Eingaben

Wir haben bereits die Grundlagen der Radioknöpfe oben behandelt. Lassen Sie uns nun die anderen gängigen Funktionen und Techniken im Zusammenhang mit Radioknöpfen betrachten, die Sie kennen müssen.

Auswahl eines Radioknopfes als Standard

Um einen Radioknopf 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 der erste Radioknopf nun standardmäßig ausgewählt.

Hinweis: Wenn Sie das checked-Attribut auf mehr als einen Radioknopf legen, überschreiben spätere Instanzen frühere; das bedeutet, dass der zuletzt mit checked markierte Radioknopf derjenige ist, der ausgewählt wird. Dies liegt daran, dass nur ein Radioknopf in einer Gruppe jemals gleichzeitig ausgewählt werden kann, und der User-Agent wählt automatisch andere ab, jedes Mal, wenn ein neuer als ausgewählt markiert wird.

Bereitstellen eines größeren Auswahlbereichs für Ihre Radioknöpfe

In den obigen Beispielen haben Sie möglicherweise bemerkt, dass Sie einen Radioknopf auswählen können, indem Sie auf sein zugehöriges <label>-Element klicken, sowie auf den Radioknopf selbst. Dies ist eine wirklich nützliche Funktion von HTML-Formular-Labels, 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, auf Ihren Formularen ordnungsgemäße <label>-Elemente einzurichten.

Validierung

Im Falle eines Radioknopfes mit dem required-Attribut oder einer gleichnamigen Gruppe von Radioknöpfen, von denen mindestens einer required gesetzt hat, muss ein Radioknopf ausgewählt sein, damit die Steuerung als gültig angesehen wird. Wenn kein Radioknopf ausgewählt ist, gibt die valueMissing-Eigenschaft eines ValidityState-Objekts während der Validierung true zurück, und der Browser wird den Benutzer bitten, eine Option auszuwählen.

Styling von Radio-Eingaben

Das folgende Beispiel zeigt eine etwas ausführlichere Version des Beispiels, das wir im gesamten Artikel gesehen haben, mit zusätzlichem Styling und mit besseren semantischen Elementen durch die Verwendung spezialisierter Elemente. Das HTML sieht folgendermaßen 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;
}

Besonders bemerkenswert ist hier die Verwendung der appearance-Eigenschaft (mit Präfixen, die für einige Browser benötigt werden). Standardmäßig sind Radioknöpfe (und Checkboxen) mit den nativen Styles 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 für sie erstellen. Hier haben wir eine border zusammen mit border-radius und einer transition verwendet, um eine schöne animierte Radio-Auswahl zu erstellen. Beachten Sie auch, wie die :checked Pseudoklasse verwendet wird, um die Stile für das Erscheinungsbild des Radioknopfes im ausgewählten Zustand 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 den gleichen Effekt in verschiedenen Browsern, und einige unterstützen es überhaupt nicht. Die Unterschiede sind in den neuesten Browsern kleiner.

Beachten Sie, dass beim Klicken auf einen Radioknopf ein schöner, glatter Ein-/Ausblendeffekt zu sehen ist, wenn die beiden Knöpfe den Zustand wechseln. Darüber hinaus sind der Stil und die Farbgebung der Legende und des Absende-Buttons so angepasst, dass sie einen starken Kontrast bieten. Dies ist möglicherweise nicht das Aussehen, das Sie in einer echten Webanwendung möchten, aber es zeigt sicherlich die Möglichkeiten auf.

Technische Zusammenfassung

Wert Eine Zeichenfolge, die den Wert des Radioknopfes darstellt.
Ereignisse [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event)
Unterstützte allgemeine 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
# radio-button-state-(type=radio)

Browser-Kompatibilität

Siehe auch