Combobox im HTML

Drei Wege zur Auswahl

select, datalist, eigene Combobox: drei Bauarten, drei Namensfragen.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 4.1.2Linke Ortsauswahl ohne Namen

Auswahlfeld festlegen

Drei Wege durch dieselbe Ortsliste

Die sichtbare Form ist ähnlich. Entscheidend ist, ob nur feste Werte gelten, freie Eingabe erlaubt ist oder Sie die gesamte Vorschlagslogik selbst steuern müssen.

Anforderung hinein, passende Bauart heraus

Statische Ansichten: Die gezeigten Felder erklären Zustände und sind nicht bedienbar.

A

Muss der Wert aus einer festen Liste stammen? Ja.

Natives select

Zielort
Berlin
✓ BerlinBernBonn

Browser und Betriebssystem führen Auswahl und Tastatur.

Suche
Typauswahl je Plattform, kein eigenes Filtern
Freier Text
Nein
Aufwand
HTML und sichtbares label
Grenze
Popup und Darstellung sind nur begrenzt gestaltbar.
B

Darf auch ein Wert außerhalb der Vorschläge stehen? Ja.

input mit datalist

Zielort
Ber
BerlinBernBergheim

„Bergtal“ dürfte trotzdem als eigener Wert stehen bleiben.

Suche
Browser zeigt passende Vorschläge beim Tippen.
Freier Text
Ja
Aufwand
Wenig Markup, Verhalten kommt vom Browser.
Grenze
Popup, Zoom und Ansage unterscheiden sich je Kombination.
C

Brauchen Sie eigene Filter, Gruppen oder Trefferlogik? Ja.

Eigene ARIA-Combobox

Zielort
BerDOM-Fokus
Berlin aktivBernBergheim

aria-activedescendant="ort-berlin" verbindet Feld und aktive Option.

Suche
Sie bestimmen Filter und Auswahlregel.
Freier Text
Je nach Ihrer Umsetzung
Aufwand
JavaScript, Fokus, Zustände und Tests
Grenze
ARIA liefert Semantik, aber keine Bedienlogik.

Beginnen Sie mit dem nativen Element, das die Anforderung erfüllt. Die eigene Combobox ist ein zusammengesetztes Widget und braucht eine vollständige Tastatur- und Zustandslogik.

Zwei Fokusspuren in der eigenen Combobox

1

Tab setzt den DOM-Fokus in das Eingabefeld.

role="combobox"
2

Pfeil nach unten verschiebt den aktiven Vorschlag.

aria-activedescendant="ort-berlin"
3

Enter übernimmt; Escape schließt ohne Übernahme.

aria-expanded="false"

Der sichtbare aktive Eintrag wandert, während der DOM-Fokus im Feld bleibt. Tab führt aus dem gesamten Widget heraus, nicht durch jede einzelne Option.

Feste Werte: select

<label for="ziel">Zielort</label>
<select id="ziel" name="ziel">
  <option value="">Bitte wählen</option>
  <option value="berlin">Berlin</option>
  <option value="bern">Bern</option>
</select>

Freie Eingabe: datalist

<label for="ort">Zielort</label>
<input id="ort" name="ort" list="orte">
<datalist id="orte">
  <option value="Berlin"></option>
  <option value="Bern"></option>
</datalist>

Eigene Combobox: Zustandsgerüst

Dieses Markup zeigt den offenen Zustand. JavaScript muss Attribute, aktiven Eintrag, Auswahl und Tastatur synchron halten.

<label id="ortEigeneLabel" for="ortEigene">Zielort</label>
<input id="ortEigene" role="combobox"
  aria-autocomplete="list"
  aria-expanded="true"
  aria-controls="ortListe"
  aria-activedescendant="ort-berlin">

<ul id="ortListe" role="listbox" aria-labelledby="ortEigeneLabel">
  <li id="ort-berlin" role="option" aria-selected="true">
    Berlin
  </li>
  <li id="ort-bern" role="option" aria-selected="false">
    Bern
  </li>
</ul>

Primärquellen für die Auswahl

MDN dokumentiert das native select-Element und nennt beim datalist-Element Grenzen bei Zoom, Gestaltung und einzelnen Screenreader-Browser-Kombinationen. Das Combobox-Muster der WAI-ARIA Authoring Practices beschreibt Zustände, Popup-Beziehungen und Tastaturverhalten eigener Widgets.

Aus dem Prüfbericht

Drei Felder, drei Befunde

Zum Mitnehmen

Die Combobox, korrigiert

Erst das native Feld benennen, dann das eigene Muster.

Korrektur in 3 Schritten ansehen
  1. Dem select seinen Namen geben

    Der vorhandene Text bekommt eine id, das select verweist mit aria-labelledby darauf. Auswahl, Optionen und Gestaltung bleiben gleich.

    KorrekturvergleichSchritt 1 · HTML

    Vorher

    <span>Ausgangspunkt</span>
    <select id="routeFrom">
      <option value="kath">Kath</option>
    </select>

    Nachher

    <span id="routeFromLabel">Ausgangspunkt</span>
    <select id="routeFrom" aria-labelledby="routeFromLabel">
      <option value="kath">Kath</option>
    </select>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Gehen Sie mit der Tab-Taste in die Liste. Sie sagt „Ausgangspunkt, Kath“.

  2. Freie Eingabe mit datalist bauen

    Für freie Vorschläge genügt ein input mit list und einer datalist. Der Browser liefert Tastaturbedienung und Vorschlagsliste selbst.

    KorrekturvergleichSchritt 2 · HTML

    Vorher

    <div role="combobox" aria-expanded="false">
      <div role="textbox" contenteditable="true"></div>
    </div>

    Nachher

    <label for="ort">Ausgangspunkt</label>
    <input id="ort" list="orte">
    <datalist id="orte">
      <option value="Kath"></option>
    </datalist>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Tippen Sie einen Buchstaben. Der Browser zeigt die passenden Vorschläge.

  3. Eigene Vorschläge als option auszeichnen

    Bleibt das eigene Muster, braucht die Liste echte Optionen. role="option" und aria-selected machen jeden Vorschlag zum Eintrag der Auswahl.

    KorrekturvergleichSchritt 3 · ARIA

    Vorher

    <div role="listbox" aria-label="Vorschläge">
      <span>Kath</span>
    </div>

    Nachher

    <div role="listbox" aria-label="Vorschläge">
      <span role="option" aria-selected="false">Kath</span>
    </div>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Lassen Sie die Liste vorlesen. Das Programm sagt „Liste mit einem Eintrag, Kath“.

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.