Start · Sprachen · JavaScript · Referenz · ElementInternals.ariaMultiSelectable

ElementInternals.ariaMultiSelectable

Eigenschaft

Legt für ein Custom Element die Standard-ARIA-Eigenschaft <code>aria-multiselectable</code> fest bzw. liest sie aus. Sie gibt an, ob mehrere Einträge gleichzeitig auswählbar sind.

seit JavaScript Baseline 2023: Chrome 77+, Edge 79+, Safari 16.4+, Kategorie: webapi

Signatur

ElementInternals.ariaMultiSelectable

Beschreibung

Über die Eigenschaft ariaMultiSelectable des ElementInternals-Objekts legt ein autonomes Custom Element fest, ob Hilfstechnologien wie Screenreader es als Mehrfachauswahl ansagen sollen. Dabei wird kein sichtbares aria-multiselectable-Attribut in das DOM geschrieben. Der Wert gilt als interne Standard-Semantik des Elements und steht nur im Accessibility-Baum.

Der Wert ist ein String: "true" heißt, dass mehrere Einträge gleichzeitig ausgewählt sein können. "false" steht für eine Einfachauswahl und ist das Standardverhalten. Mit null entfernen Sie den Wert wieder. Sinnvoll ist die Eigenschaft nur zusammen mit Rollen, die eine Auswahl verwalten: listbox, grid, tablist und tree (bzw. treegrid).

Setzt der Nutzer der Komponente selbst ein aria-multiselectable-Attribut auf das Host-Element, hat dieses Vorrang vor dem Wert aus ElementInternals. So kann die Komponente einen sinnvollen Standard mitbringen, den der Seitenautor bei Bedarf überschreibt.

Parameter

Name Typ Default Beschreibung
$value string | null null Beim Setzen: "true" oder "false". null entfernt den Wert.

Rückgabewert

Typ
string | null
Beschreibung
Der aktuell gesetzte Wert ("true" oder "false"). Wurde nichts gesetzt, ist er null.

Beispiele

Listbox-Komponente mit Mehrfachauswahl

class MultiListbox extends HTMLElement {
  #internals;
  constructor() {
    super();
    this.#internals = this.attachInternals();
    this.#internals.role = 'listbox';
    this.#internals.ariaMultiSelectable = 'true';
  }
  get internals() { return this.#internals; }
}
customElements.define('multi-listbox', MultiListbox);

const box = document.createElement('multi-listbox');
console.log(box.internals.ariaMultiSelectable);
console.log(box.getAttribute('aria-multiselectable'));
true null

Modus dynamisch über ein Attribut umschalten

class SelectList extends HTMLElement {
  static observedAttributes = ['multiple'];
  #internals = this.attachInternals();
  constructor() {
    super();
    this.#internals.role = 'listbox';
    this.#internals.ariaMultiSelectable = 'false';
  }
  attributeChangedCallback(name, _old, value) {
    if (name === 'multiple') {
      // Leerer String bedeutet: Attribut ist vorhanden
      this.#internals.ariaMultiSelectable = value !== null ? 'true' : 'false';
      console.log('Mehrfachauswahl:', this.#internals.ariaMultiSelectable);
    }
  }
}
customElements.define('select-list', SelectList);

const list = document.createElement('select-list');
list.setAttribute('multiple', '');
list.removeAttribute('multiple');
Mehrfachauswahl: true Mehrfachauswahl: false

Feature-Erkennung mit Fallback-Attribut

class FallbackGrid extends HTMLElement {
  constructor() {
    super();
    const internals = this.attachInternals?.();
    if (internals && 'ariaMultiSelectable' in internals) {
      internals.role = 'grid';
      internals.ariaMultiSelectable = 'true';
    } else {
      // Ältere Browser: sichtbare Attribute setzen, sobald das Element im DOM ist
      this.fallback = true;
    }
  }
  connectedCallback() {
    if (this.fallback) {
      this.setAttribute('role', 'grid');
      this.setAttribute('aria-multiselectable', 'true');
    }
  }
}
customElements.define('fallback-grid', FallbackGrid);
document.body.append(document.createElement('fallback-grid'));

// Wichtig · Fallstricke

  • Nur Semantik: Die Eigenschaft ändert kein Verhalten. Mehrfachauswahl per Strg/Shift-Klick und die Tastatursteuerung müssen Sie selbst umschreiben. Außerdem müssen Sie aria-selected auf den einzelnen option-Einträgen pflegen.
  • Der Wert ist ein String: Weisen Sie "true" bzw. "false" zu, keinen booleschen Wert. true wird zwar in "true" umgewandelt, false aber in "false" und nicht in null.
  • Vorrang: Ein vom Seitenautor gesetztes aria-multiselectable-Attribut überschreibt den Wert aus ElementInternals.
  • attachInternals() ist nur für autonome Custom Elements verfügbar, also nicht für eingebaute Elemente mit is="…". Sie dürfen die Methode pro Element nur einmal aufrufen, sonst wird ein NotSupportedError ausgelöst.
  • Kompatibilität: Firefox unterstützt die ARIA-Reflection auf ElementInternals erst ab Version 119, Safari ab 16.4. Für ältere Browser sollten Sie eine Feature-Erkennung wie in Beispiel 3 einbauen.