Start · Sprachen · JavaScript · Referenz · HTMLInputElement.list

HTMLInputElement.list

Eigenschaft

Schreibgeschützte Eigenschaft, die das über das <code>list</code>-Attribut verknüpfte <code>HTMLDataListElement</code> liefert – oder <code>null</code>.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

get HTMLInputElement.list

Beschreibung

Die schreibgeschützte Eigenschaft list eines HTMLInputElement gibt das <datalist>-Element zurück, dessen id im list-Attribut des Eingabefelds steht. Über diese Verknüpfung zeigt der Browser beim Tippen Vorschläge an (Autovervollständigung), ohne dass der Nutzer auf diese Werte festgelegt wird.

Der Rückgabewert ist null, wenn kein list-Attribut gesetzt ist, wenn die angegebene id im Dokument nicht existiert, wenn das referenzierte Element kein <datalist> ist oder wenn der Eingabetyp keine Vorschlagslisten unterstützt (z. B. hidden, checkbox, radio, file, password, Schaltflächen).

Die Eigenschaft eignet sich, um per Skript auf die Vorschläge zuzugreifen – etwa um sie auszulesen, zu filtern oder dynamisch neue <option>-Elemente hinzuzufügen. Um die Verknüpfung selbst zu ändern, muss das Attribut per setAttribute('list', id) gesetzt werden, da die Eigenschaft nur lesbar ist.

Rückgabewert

Typ
HTMLDataListElement | null
Beschreibung
Das verknüpfte <datalist>-Element oder null, wenn keine gültige Verknüpfung besteht.

Beispiele

Vorschläge einer Datalist auslesen

// HTML:
// <input id="browser" list="browsers">
// <datalist id="browsers">
//   <option value="Firefox"></option>
//   <option value="Chrome"></option>
//   <option value="Safari"></option>
// </datalist>

const input = document.querySelector('#browser');
const datalist = input.list;

if (datalist) {
  const werte = [...datalist.options].map((opt) => opt.value);
  console.log(werte);
}
["Firefox", "Chrome", "Safari"]

Vorschläge dynamisch aus einer API nachladen

// HTML: <input id="stadt" list="staedte"> <datalist id="staedte"></datalist>
const input = document.querySelector('#stadt');

input.addEventListener('input', async () => {
  const liste = input.list;
  if (!liste || input.value.length < 2) return;

  const res = await fetch(`/api/staedte?q=${encodeURIComponent(input.value)}`);
  const staedte = await res.json(); // z. B. ["Berlin", "Bern"]

  liste.replaceChildren(
    ...staedte.map((name) => new Option(name))
  );
});

Verknüpfung per Attribut setzen und prüfen

const input = document.createElement('input');
const dl = document.createElement('datalist');
dl.id = 'farben';
dl.append(new Option('Rot'), new Option('Grün'));
document.body.append(input, dl);

console.log(input.list); // noch keine Verknüpfung

// input.list = dl; // wirkungslos – Eigenschaft ist schreibgeschützt
input.setAttribute('list', 'farben');
console.log(input.list === dl);

input.type = 'checkbox';
console.log(input.list); // Typ unterstützt keine Liste
null true null

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an input.list wird ignoriert (im Strict Mode wirft sie einen TypeError). Die Verknüpfung ändert man über setAttribute('list', 'id').
  • Die Eigenschaft gibt null zurück, wenn die id auf ein anderes Element als <datalist> zeigt – vor dem Zugriff auf .options daher immer auf null prüfen.
  • Das Datalist-Element muss sich im selben Dokument bzw. derselben Shadow-Root wie das Eingabefeld befinden; über Shadow-DOM-Grenzen hinweg funktioniert die id-Referenz nicht.
  • Kompatibilität: Die Eigenschaft wird von allen modernen Browsern unterstützt. Die Darstellung der Vorschläge ist aber je nach Browser unterschiedlich (z. B. eingeschränkt bei type=\"color\" oder type=\"range\", auf manchen Mobilgeräten nur teilweise); das Aussehen lässt sich per CSS kaum anpassen.