<input type='checkbox'>

<input> Elemente des Typs checkbox werden standardmäßig als Kästchen dargestellt, die aktiviert (angehakt) sind, wie man es in einem offiziellen Regierungsformular sehen könnte. Das genaue Erscheinungsbild hängt von der Betriebssystemkonfiguration ab, unter der der Browser läuft. Im Allgemeinen ist dies ein Quadrat, es kann jedoch abgerundete Ecken haben. Eine Checkbox ermöglicht es Ihnen, einzelne Werte für die Übermittlung in einem Formular auszuwählen (oder nicht).

Probieren Sie es aus

Note: Radio-Buttons sind Checkboxes ähnlich, haben jedoch einen wichtigen Unterschied — gleichnamige Radio-Buttons werden zu einer Gruppe zusammengefasst, in der jeweils nur ein Radio-Button ausgewählt werden kann, während Checkboxes ermöglichen, einzelne Werte ein- und auszuschalten. Wenn mehrere gleichnamige Steuerelemente existieren, erlauben Radio-Buttons, dass eines ausgewählt wird, während Checkboxes die Auswahl mehrerer Werte erlauben.

Value

Ein String, der den Wert der Checkbox darstellt. Dieser wird auf der Client-Seite nicht angezeigt, sondern auf dem Server ist dies der value, der den mit dem name der Checkbox übermittelten Daten zugeordnet wird. Betrachten Sie das folgende Beispiel:

html
<form>
  <div>
    <input
      type="checkbox"
      id="subscribeNews"
      name="subscribe"
      value="newsletter" />
    <label for="subscribeNews">Subscribe to newsletter?</label>
  </div>
  <div>
    <button type="submit">Subscribe</button>
  </div>
</form>

In diesem Beispiel haben wir einen name von subscribe und einen value von newsletter. Wenn das Formular eingereicht wird, wird das Datenpaar Name/Wert subscribe=newsletter sein.

Wenn das value-Attribut weggelassen wird, ist der Standardwert für die Checkbox on, sodass die übermittelten Daten in diesem Fall subscribe=on wären.

Hinweis: Wenn eine Checkbox beim Abschicken des Formulars nicht angehakt ist, werden weder der Name noch der Wert an den Server übermittelt. Es gibt keine HTML-only Methode, um den nicht angehakten Zustand einer Checkbox darzustellen (z.B. value=unchecked). Wenn Sie einen Standardwert für die Checkbox übermitteln möchten, wenn sie nicht angehakt ist, können Sie JavaScript verwenden, um ein <input type="hidden"> innerhalb des Formulars zu erstellen, das einen Wert anzeigt, der einen nicht angehakten Zustand kennzeichnet.

Zusätzliche Attribute

Zusätzlich zu den allgemeinen Attributen, die von allen <input>-Elementen gemeinsam genutzt werden, unterstützen checkbox-Eingaben die folgenden Attribute.

checked

Ein boolean Attribut, das angibt, ob diese Checkbox standardmäßig angehakt ist (wenn die Seite geladen wird). Es zeigt nicht an, ob diese Checkbox derzeit angehakt ist: Wenn der Zustand der Checkbox geändert wird, spiegelt dieses Inhaltsattribut die Änderung nicht wider. (Nur das checked IDL-Attribut des HTMLInputElement wird aktualisiert.)

Hinweis: Im Gegensatz zu anderen Eingabesteuerelementen wird der Wert einer Checkbox nur dann in den übermittelten Daten enthalten, wenn die Checkbox derzeit checked ist. In diesem Fall wird der Wert des value-Attributes der Checkbox als Eingabewert gemeldet, oder on, wenn kein value gesetzt ist. Anders als andere Browser bewahrt Firefox standardmäßig den dynamischen checked-Zustand eines <input> über Seitennachladungen hinweg. Verwenden Sie das autocomplete Attribut, um diese Funktion zu steuern.

value

Das value-Attribut ist eines, das allen <input> gemeinsam ist; allerdings dient es bei Eingaben vom Typ checkbox einem besonderen Zweck: Wenn ein Formular abgeschickt wird, werden nur Checkboxes, die derzeit angehakt sind, an den Server übertragen, und der gemeldete Wert ist der Wert des value-Attributes. Wenn das value-Attribut nicht anders spezifiziert ist, ist es standardmäßig der String on. Dies wird im Abschnitt Value oben demonstriert.

Verwendung von Checkbox-Eingaben

Die grundlegendste Verwendung von Checkboxes haben wir bereits oben behandelt. Schauen wir uns nun die anderen gebräuchlichen Checkbox-bezogenen Funktionen und Techniken an, die Sie benötigen werden.

Umgang mit mehreren Checkboxes

Das oben gezeigte Beispiel enthält nur eine Checkbox; in realen Situationen werden Sie wahrscheinlich auf mehrere Checkboxes stoßen. Wenn sie völlig unabhängig sind, können Sie sie einfach alle separat behandeln, wie oben gezeigt. Wenn sie jedoch miteinander in Beziehung stehen, sind die Dinge nicht ganz so einfach.

Zum Beispiel enthalten wir im folgenden Demo mehrere Checkboxes, um den Benutzer seine Interessen auswählen zu lassen (siehe die vollständige Version im Abschnitt Beispiele).

html
<fieldset>
  <legend>Choose your interests</legend>
  <div>
    <input type="checkbox" id="coding" name="interest" value="coding" />
    <label for="coding">Coding</label>
  </div>
  <div>
    <input type="checkbox" id="music" name="interest" value="music" />
    <label for="music">Music</label>
  </div>
</fieldset>

In diesem Beispiel sehen Sie, dass wir jeder Checkbox denselben name gegeben haben. Wenn beide Checkboxen angehakt und dann das Formular abgeschickt werden, erhalten Sie eine Zeichenfolge mit Name/Wert-Paaren wie folgt: interest=coding&interest=music. Wenn diese Zeichenfolge den Server erreicht, müssen Sie sie anders als ein assoziatives Array parsen, damit alle Werte erfasst werden, nicht nur der letzte Wert von interest. Eine Technik, die mit Python verwendet wird, ist zum Beispiel im Artikel Handle Multiple Checkboxes with a Single Serverside Variable beschrieben.

Standardmäßig markierte Checkboxes

Um eine Checkbox standardmäßig angehakt zu machen, geben Sie ihr das checked-Attribut. Siehe das folgende Beispiel:

html
<fieldset>
  <legend>Choose your interests</legend>
  <div>
    <input type="checkbox" id="coding" name="interest" value="coding" checked />
    <label for="coding">Coding</label>
  </div>
  <div>
    <input type="checkbox" id="music" name="interest" value="music" />
    <label for="music">Music</label>
  </div>
</fieldset>

Größere Trefferfläche für Ihre Checkboxes bereitstellen

In den obigen Beispielen haben Sie möglicherweise bemerkt, dass Sie eine Checkbox umschalten können, indem Sie auf ihr zugeordnetes <label>-Element klicken, sowie auf die Checkbox selbst. Dies ist eine sehr nützliche Funktion von HTML-Formularbeschriftungen, die es einfacher macht, die gewünschte Option auszuwählen, insbesondere auf Geräten mit kleinen Bildschirmen wie Smartphones.

Uber die Zugänglichkeit hinaus ist dies ein weiterer guter Grund, die <label>-Elemente in Ihren Formularen richtig einzurichten.

Indeterminierte Zustand-Checkboxes

Eine Checkbox kann sich in einem indeterminierten Zustand befinden. Dieser wird mit der HTMLInputElement-Objekteigenschaft indeterminate über JavaScript gesetzt (er kann nicht mit einem HTML-Attribut gesetzt werden):

js
inputInstance.indeterminate = true;

Wenn indeterminate auf true gesetzt ist, hat die Checkbox in den meisten Browsern eine horizontale Linie im Kästchen (sie sieht in der Regel wie ein Bindestrich oder Minuszeichen aus) anstelle eines Häkchens/Kreuzes.

Hinweis: Dies ist rein eine visuelle Änderung. Es hat keinen Einfluss darauf, ob der value der Checkbox in einer Formularübermittlung verwendet wird. Dies wird durch den checked-Zustand entschieden, unabhängig vom indeterminate-Zustand.

Es gibt nicht viele Anwendungsfälle für diese Eigenschaft. Der häufigste ist, wenn eine Checkbox verfügbar ist, die eine Anzahl von Unteroptionen (die ebenfalls Checkboxes sind) "besitzt". Wenn alle Unteroptionen angehakt sind, ist die besitzende Checkbox ebenfalls angehakt, und wenn sie alle nicht angehakt sind, ist die besitzende Checkbox nicht angehakt. Wenn eine oder mehrere der Unteroptionen einen anderen Zustand als die anderen haben, befindet sich die besitzende Checkbox im unentschiedenen Zustand.

Dies kann im unten stehenden Beispiel gesehen werden (dank an CSS-Tricks für die Inspiration). In diesem Beispiel halten wir einen Überblick über die Zutaten, die wir für ein Rezept sammeln. Wenn Sie das Kontrollkästchen einer Zutat aktivieren oder deaktivieren, überprüft eine JavaScript-Funktion die Gesamtzahl der angehakten Zutaten:

  • Wenn keine angehakt sind, ist das Kontrollkästchen für den Rezeptnamen nicht angehakt.
  • Wenn ein oder zwei angehakt sind, ist das Kontrollkästchen für den Rezeptnamen indeterminate.
  • Wenn alle drei angehakt sind, ist das Kontrollkästchen für den Rezeptnamen checked.

In diesem Fall wird der indeterminate-Zustand verwendet, um anzugeben, dass das Sammeln der Zutaten begonnen hat, aber das Rezept noch nicht vollständig ist.

js
const overall = document.querySelector("#enchantment");
const ingredients = document.querySelectorAll("ul input");

overall.addEventListener("click", (e) => {
  e.preventDefault();
});

for (const ingredient of ingredients) {
  ingredient.addEventListener("click", updateDisplay);
}

function updateDisplay() {
  let checkedCount = 0;
  for (const ingredient of ingredients) {
    if (ingredient.checked) {
      checkedCount++;
    }
  }

  if (checkedCount === 0) {
    overall.checked = false;
    overall.indeterminate = false;
  } else if (checkedCount === ingredients.length) {
    overall.checked = true;
    overall.indeterminate = false;
  } else {
    overall.checked = false;
    overall.indeterminate = true;
  }
}

Validierung

Checkboxes unterstützen Validierung (angeboten für alle <input>). Jedoch sind die meisten der ValidityStates immer false. Wenn die Checkbox das required-Attribut hat, aber nicht angehakt ist, dann wird ValidityState.valueMissing true sein.

Beispiele

Das folgende Beispiel ist eine erweiterte Version des "mehrere Checkboxes"-Beispiels, das wir oben gesehen haben – es hat mehr Standardoptionen plus ein "andere" Checkbox, die bei Aktivierung ein Textfeld erscheinen lässt, um einen Wert für die "andere" Option einzugeben. Dies wird mit einem einfachen JavaScript-Block erreicht. Das Beispiel enthält implizite Labels, wobei das <input> direkt im <label> enthalten ist. Das Texteingabefeld, ohne sichtbares Label, enthält das aria-label Attribut, das seinen zugänglichen Namen angibt. Dieses Beispiel enthält auch etwas CSS, um die Gestaltung zu verbessern.

HTML

html
<form>
  <fieldset>
    <legend>Choose your interests</legend>
    <div>
      <label>
        <input type="checkbox" id="coding" name="interest" value="coding" />
        Coding
      </label>
    </div>
    <div>
      <label>
        <input type="checkbox" id="music" name="interest" value="music" />
        Music
      </label>
    </div>
    <div>
      <label>
        <input type="checkbox" id="art" name="interest" value="art" />
        Art
      </label>
    </div>
    <div>
      <label>
        <input type="checkbox" id="sports" name="interest" value="sports" />
        Sports
      </label>
    </div>
    <div>
      <label>
        <input type="checkbox" id="cooking" name="interest" value="cooking" />
        Cooking
      </label>
    </div>
    <div>
      <label>
        <input type="checkbox" id="other" name="interest" value="other" />
        Other
      </label>
      <input
        type="text"
        id="otherValue"
        name="other"
        aria-label="Other interest" />
    </div>
    <div>
      <button type="submit">Submit form</button>
    </div>
  </fieldset>
</form>

CSS

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

form {
  width: 600px;
  margin: 0 auto;
}

div {
  margin-bottom: 10px;
}

fieldset {
  background: cyan;
  border: 5px solid blue;
}

legend {
  padding: 10px;
  background: blue;
  color: cyan;
}

JavaScript

js
const otherCheckbox = document.querySelector("#other");
const otherText = document.querySelector("#otherValue");
otherText.style.visibility = "hidden";

otherCheckbox.addEventListener("change", () => {
  if (otherCheckbox.checked) {
    otherText.style.visibility = "visible";
    otherText.value = "";
  } else {
    otherText.style.visibility = "hidden";
  }
});

Technische Zusammenfassung

Value Ein String, der den Wert der Checkbox darstellt.
Ereignisse [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event)
Unterstützte allgemeine Attribute checked
IDL-Attribute checked, indeterminate und value
DOM-Schnittstelle

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

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

Spezifikationen

Specification
HTML Standard
# checkbox-state-(type=checkbox)

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch