Checkbox im HTML

Ein Kästchen braucht seinen Namen

Kästchen, Beschriftung, Gruppe: drei Stellen in jedem Auswahlformular.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 4.1.2Regler ohne zugänglichen Namen

Checkbox im HTML

Vier Verbindungen machen aus Kästchen ein Formular.

Gruppe, Name, Wert und Zustand erfüllen jeweils eine andere Aufgabe.

Benachrichtigungen
Alle auswählenSteuert die Gruppe, wird nicht gesendet
E-Mailname="kanal" · value="mail"
SMSname="kanal" · value="sms"
Briefname="kanal" · value="post"
legendstellt die gemeinsame Frage

Die kurze Gruppenüberschrift ergänzt jede einzelne Option.

label + idgeben Name und große Klickfläche

for und id müssen exakt übereinstimmen.

namebündelt die Formulardaten

Alle Kanal-Checkboxen verwenden denselben Schlüssel.

valueunterscheidet die Auswahl

Nur angehakte Checkboxen senden ihren jeweiligen Wert.

Schematische Darstellung: fieldset und legend bilden den Rahmen. Das native input type="checkbox" bringt Rolle, Zustand, Leertaste und Formularübertragung bereits mit.

„Alle auswählen“ liest die Kinder

Der sichtbare dritte Zustand heißt indeterminate.

Keines gewähltchecked = false
Ein Teil gewähltindeterminate = true
Alle gewähltchecked = true

indeterminate verändert nur die Darstellung. Ob ein Wert gesendet wird, entscheidet weiterhin checked.

Was im Request ankommt

kanal = mailkanal = post

SMS ist nicht angehakt und fehlt deshalb. „Alle auswählen“ hat keinen name und wird ebenfalls nicht übertragen.

HTML

Die vollständige Gruppe

<form action="/einstellungen" method="post">
  <fieldset>
    <legend>Benachrichtigungen</legend>

    <p>
      <input id="alle" type="checkbox">
      <label for="alle">Alle auswählen</label>
    </p>

    <p>
      <input id="mail" type="checkbox"
        name="kanal" value="mail" checked>
      <label for="mail">E-Mail</label>
    </p>

    <p>
      <input id="sms" type="checkbox"
        name="kanal" value="sms">
      <label for="sms">SMS</label>
    </p>

    <p>
      <input id="post" type="checkbox"
        name="kanal" value="post" checked>
      <label for="post">Brief</label>
    </p>
  </fieldset>
  <button type="submit">Speichern</button>
</form>
JavaScript

Auswahl und Mischzustand

const alle = document.querySelector('#alle');
const kanaele = [
  ...document.querySelectorAll(
    'input[name="kanal"]'
  )
];

function aktualisieren() {
  const anzahl = kanaele.filter(
    (feld) => feld.checked
  ).length;

  alle.checked = anzahl === kanaele.length;
  alle.indeterminate =
    anzahl > 0 && anzahl < kanaele.length;
}

alle.addEventListener('change', () => {
  kanaele.forEach((feld) => {
    feld.checked = alle.checked;
  });
  aktualisieren();
});

kanaele.forEach((feld) => {
  feld.addEventListener('change', aktualisieren);
});

aktualisieren();

So prüfen Sie es

Vier Beobachtungen reichen

  1. Text

    Klicken Sie auf „SMS“. Das Kästchen muss mit dem sichtbaren Text umschalten.

  2. Leertaste

    Fokussieren Sie eine Checkbox. Die Leertaste muss ihren Zustand ändern.

  3. Gruppe

    Prüfen Sie die Ansage: erst „Benachrichtigungen“, dann Option und Zustand.

  4. Request

    Kontrollieren Sie, dass nur angehakte Kanal-Werte übertragen werden.

Aus dem Prüfbericht

Zwei Bauarten, zwei Befunde

Zum Mitnehmen

Die Checkbox, korrigiert

Natives Kästchen mit label, nachgebautes mit aria-label.

Korrektur in 2 Schritten ansehen
  1. Kästchen und Beschriftung verbinden

    Ein label mit for auf die id des Kästchens macht den Text zum Namen. Er wird zugleich zur größeren Klickfläche.

    KorrekturvergleichSchritt 1 · HTML

    Vorher

    <span>Rechnung per Post</span>
    <input id="post" type="checkbox" name="versand" value="post">

    Nachher

    <label for="post">Rechnung per Post</label>
    <input id="post" type="checkbox" name="versand" value="post">

    Markierte Zeilen wurden geändert

    So prüfen Sie es Klicken Sie auf den Text. Das Kästchen wechselt seinen Zustand.

  2. Das nachgebaute Kästchen benennen

    Ein eigenes Auswahlfeld meldet Rolle und Zustand, aber keinen Zweck. aria-label ergänzt die Option; Darstellung und Bedienung bleiben gleich.

    KorrekturvergleichSchritt 2 · ARIA

    Vorher

    <div role="checkbox" aria-checked="false" tabindex="0">
      <span aria-hidden="true">◇</span>
    </div>

    Nachher

    <div role="checkbox" aria-checked="false" tabindex="0"
      aria-label="Rechnung per Post">
      <span aria-hidden="true">◇</span>
    </div>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Gehen Sie mit der Tab-Taste auf das Kästchen. Es sagt „Rechnung per Post, Kontrollkästchen“.

Werbung

Kostenloser Website-Barrierefreiheits-Check

Website auf Barrierefreiheit prüfen.

Technische WCAG-Warnsignale erkennen. Kritische Stellen zuerst prüfen.

Der Website-Check ist bereit.

Werbung

Ein letzter Schritt

Prüfen, bevor Sie gehen.

Finden Sie automatisch erkennbare Barrieren auf Ihrer eigenen Website.

Website prüfen

Kostenlos starten · keine Installation

Automatisches Screening. Tastaturbedienung und Screenreader bleiben manuelle Prüfung.