<input type="checkbox">
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
<input>-Elemente des Typs checkbox werden standardmäßig als Kästchen gerendert, die aktiviert angekreuzt werden, ähnlich wie Sie es in einem offiziellen Regierungsformular sehen könnten. 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 zur Übermittlung in einem Formular auszuwählen (oder nicht).
Probieren Sie es aus
<fieldset>
<legend>Choose your monster's features:</legend>
<div>
<input type="checkbox" id="scales" name="scales" checked />
<label for="scales">Scales</label>
</div>
<div>
<input type="checkbox" id="horns" name="horns" />
<label for="horns">Horns</label>
</div>
</fieldset>
p,
label {
font:
1rem "Fira Sans",
sans-serif;
}
input {
margin: 0.4rem;
}
Hinweis: Radio-Buttons ähneln Checkboxes, weisen jedoch einen wichtigen Unterschied auf — gleichnamige Radio-Buttons werden in einer Gruppe zusammengefasst, in der nur ein Radio-Button gleichzeitig ausgewählt werden kann, während Checkboxes es ermöglichen, einzelne Werte ein- und auszuschalten. Wo mehrere gleichnamige Steuerelemente existieren, erlauben Radio-Buttons die Auswahl von einem, während Checkboxes mehrere Werte ausgewählt lassen.
Wert
Ein String, der den Wert der Checkbox repräsentiert. Dieser wird auf der Client-Seite nicht angezeigt, aber auf dem Server ist dies der value, der mit dem name der Checkbox an die übermittelten Daten gegeben wird. Nehmen Sie folgendes Beispiel:
<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 Namen subscribe und einen Wert newsletter. Wenn das Formular übermittelt wird, ist das Datenpaar Name/Wert subscribe=newsletter.
Wenn das value-Attribut weggelassen wurde, ist der Standardwert für die Checkbox on, sodass die übermittelten Daten in diesem Fall subscribe=on wären.
Hinweis:
Wenn eine Checkbox beim Übermitteln ihres Formulars nicht angekreuzt ist, werden weder der Name noch der Wert an den Server übermittelt. Es gibt keine HTML-exklusive Methode, um den nicht angekreuzten Zustand einer Checkbox darzustellen (z. B. value=unchecked). Wenn Sie einen Standardwert für die nicht angekreuzte Checkbox übermitteln möchten, können Sie JavaScript einfügen, um ein <input type="hidden"> innerhalb des Formulars mit einem Wert zu erstellen, der den nicht angekreuzten Zustand anzeigt.
Zusätzliche Attribute
Zusätzlich zu den allgemeinen Attributen, die alle <input>-Elemente gemeinsam haben, unterstützen checkbox-Eingaben die folgenden Attribute.
checked-
Ein Boolean-Attribut, das angibt, ob diese Checkbox standardmäßig (wenn die Seite geladen wird) angekreuzt ist. Es zeigt nicht an, ob diese Checkbox derzeit angekreuzt ist: Wenn sich der Zustand der Checkbox ändert, spiegelt dieses Inhaltsattribut die Änderung nicht wider. (Nur das
checkedIDL-Attribut desHTMLInputElementwird aktualisiert.)Hinweis: Anders als bei anderen Eingabesteuerelementen wird der Wert einer Checkbox nur in die übermittelten Daten aufgenommen, wenn die Checkbox derzeit
checkedist. Ist dies der Fall, wird der Wert desvalue-Attributs der Checkbox als Wert der Eingabe gemeldet oderon, wenn keinvaluefestgelegt ist. Im Gegensatz zu anderen Browsern speichert Firefox standardmäßig den dynamischen checked-Zustand eines<input>über Seitenladevorgänge hinweg. Verwenden Sie dasautocomplete-Attribut, um diese Funktion zu steuern. value-
Das
value-Attribut ist eines, das alle<input>s gemeinsam haben; jedoch erfüllt es eine besondere Aufgabe für Eingaben des Typscheckbox: Wenn ein Formular übermittelt wird, werden nur die aktuell angekreuzten Checkboxes an den Server übermittelt, und der gemeldete Wert ist der Wert desvalue-Attributs. Wenn dasvaluenicht anderweitig angegeben wird, ist es standardmäßig der Stringon. Dies wird im Abschnitt Wert oben demonstriert.
Verwendung von Checkbox-Inputs
Wir haben bereits die grundlegendste Verwendung von Checkboxes behandelt. Schauen wir uns jetzt die anderen üblichen checkbox-bezogenen Funktionen und Techniken an, die Sie benötigen.
Umgang mit mehreren Checkboxes
Das oben gesehene Beispiel enthielt nur eine Checkbox; in realen Situationen werden Sie wahrscheinlich auf mehrere Checkboxes stoßen. Wenn sie völlig unzusammenhängend sind, können Sie sie einfach alle separat behandeln, wie oben gezeigt. Wenn sie jedoch alle zusammenhängen, sind die Dinge nicht ganz so einfach.
Zum Beispiel fügen wir im folgenden Demo mehrere Checkboxes ein, um dem Benutzer die Auswahl seiner Interessen zu ermöglichen (siehe die vollständige Version im Abschnitt Beispiele).
<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 Checkboxes angekreuzt sind und das Formular dann übermittelt wird, erhalten Sie einen String von Name/Wert-Paaren wie folgt: interest=coding&interest=music. Wenn dieser String den Server erreicht, müssen Sie ihn anders analysieren als als ein assoziatives Array, sodass alle Werte, nicht nur der letzte Wert von interest, erfasst werden. Eine Technik, die mit Python verwendet wird, finden Sie unter Handle Multiple Checkboxes with a Single Serverside Variable, zum Beispiel.
Voreingestelltes Ankreuzen von Kästchen
Um eine Checkbox standardmäßig angekreuzt zu setzen, geben Sie ihr das Attribut checked. Siehe das folgende Beispiel:
<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>
Bereitstellung eines größeren Trefferbereichs für Ihre Checkboxes
In den obigen Beispielen haben Sie möglicherweise bemerkt, dass Sie eine Checkbox durch Klicken auf das zugeordnete <label>-Element sowie direkt auf die Checkbox selbst umschalten können. Dies ist eine wirklich nützliche Funktion von HTML-Formularlabels, die es einfacher macht, die gewünschte Option auszuwählen, insbesondere auf Geräten mit kleinen Bildschirmen wie Smartphones.
Neben der Zugänglichkeit ist dies ein weiterer guter Grund, <label>-Elemente in Ihren Formularen ordnungsgemäß zu konfigurieren.
Checkboxes im unbestimmten Zustand
Eine Checkbox kann sich in einem unbestimmten Zustand befinden. Dies wird über die indeterminate-Eigenschaft des HTMLInputElement-Objekts via JavaScript gesetzt (es kann nicht mit einem HTML-Attribut gesetzt werden):
inputInstance.indeterminate = true;
Wenn indeterminate true ist, hat die Checkbox eine horizontale Linie im Kasten (sie sieht in den meisten Browsern eher wie ein Bindestrich oder Minuszeichen aus) anstelle eines Häkchens/Kreuzes.
Hinweis:
Dies ist lediglich eine visuelle Änderung. Sie hat keinen Einfluss darauf, ob der value der Checkbox bei 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 Reihe von Unteroptionen "besitzt" (die ebenfalls Checkboxes sind). Wenn alle Unteroptionen angekreuzt sind, ist auch die übergeordnete Checkbox angekreuzt, und wenn sie alle nicht angekreuzt sind, ist die übergeordnete Checkbox nicht angekreuzt. Wenn eine oder mehrere der Unteroptionen einen anderen Zustand als die anderen haben, befindet sich die übergeordnete Checkbox im unbestimmten Zustand.
Dies kann im folgenden Beispiel gesehen werden (danke an CSS Tricks für die Inspiration). In diesem Beispiel verfolgen wir die Zutaten, die wir für ein Rezept sammeln. Wenn Sie die Checkbox einer Zutat an- oder abkreuzen, überprüft eine JavaScript-Funktion die Gesamtanzahl der angekreuzten Zutaten:
- Wenn keine angekreuzt ist, wird die Checkbox des Rezeptnamens auf nicht angekreuzt gesetzt.
- Wenn ein oder zwei angekreuzt sind, wird die Checkbox des Rezeptnamens auf
indeterminategesetzt. - Wenn alle drei angekreuzt sind, wird die Checkbox des Rezeptnamens auf
checkedgesetzt.
In diesem Fall wird der indeterminate-Zustand verwendet, um anzuzeigen, dass das Sammeln der Zutaten begonnen hat, das Rezept jedoch noch nicht vollständig ist.
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;
}
}
<form>
<fieldset>
<legend>Complete the recipe</legend>
<div>
<input type="checkbox" id="enchantment" name="enchantment" />
<label for="enchantment">Enchantment table</label>
<ul>
<li>
<input type="checkbox" id="book" name="ingredient" value="book" />
<label for="book">Book</label>
</li>
<li>
<input
type="checkbox"
id="diamonds"
name="ingredient"
value="diamonds" />
<label for="diamonds">Diamonds (x2)</label>
</li>
<li>
<input
type="checkbox"
id="obsidian"
name="ingredient"
value="obsidian" />
<label for="obsidian">Obsidian (x4)</label>
</li>
</ul>
</div>
</fieldset>
</form>
Validierung
Checkboxes unterstützen die Validierung (die allen <input>s angeboten wird). Allerdings werden die meisten ValidityState-Zustände immer false sein. Wenn die Checkbox das required-Attribut hat, aber nicht angekreuzt ist, wird ValidityState.valueMissing true sein.
Beispiele
Das folgende Beispiel ist eine erweiterte Version des "mehrere Checkboxes"-Beispiels, das wir oben gesehen haben — es enthält mehr Standardoptionen sowie eine "andere"-Checkbox, die beim Ankreuzen ein Textfeld zum Eingeben eines Werts für die "andere"-Option erscheinen lässt. Dies wird mit einem kurzen JavaScript-Block erreicht. Das Beispiel enthält implizite Labels, mit dem <input> direkt innerhalb des <label>. Das Texteingabefeld, das kein sichtbares Label hat, enthält das aria-label-Attribut, das seinen zugänglichen Namen bereitstellt. Dieses Beispiel enthält auch etwas CSS, um das Styling zu verbessern.
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
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
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
| Wert | Ein String, der den Wert der Checkbox repräsentiert. |
| 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) |
| Methoden | [`select()`](/de/docs/Web/API/HTMLInputElement/select) |
| Implizierte ARIA-Rolle | checkbox |
Spezifikationen
| Specification |
|---|
| HTML> # checkbox-state-(type=checkbox)> |
Browser-Kompatibilität
Siehe auch
:checked,:indeterminate: CSS-Selektoren, die es ermöglichen, Checkboxes basierend auf ihrem aktuellen Zustand zu stylenHTMLInputElement: HTML DOM API, die das<input>-Element implementiert