Start · Sprachen · JavaScript · Referenz · HTMLSelectElement.validationMessage

HTMLSelectElement.validationMessage

Eigenschaft

Liefert die lokalisierte Fehlermeldung des Browsers, die beschreibt, warum ein <code>&lt;select&gt;</code>-Element seine Validierungsregeln nicht erfüllt, oder einen leeren String.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

HTMLSelectElement.validationMessage

Beschreibung

Die schreibgeschützte Eigenschaft validationMessage gibt einen String mit der Meldung zurück, die der Browser bei einer fehlgeschlagenen Prüfung des <select>-Elements anzeigen würde. Sie gehört zur Constraint Validation API. Bei einem Auswahlfeld ist der häufigste Fall das Attribut required, wenn keine gültige Option gewählt ist oder nur ein Platzhalter mit leerem value. Der zweite Fall ist ein eigener Fehler, den man mit setCustomValidity() gesetzt hat.

Ist das Element gültig oder nimmt es gar nicht an der Validierung teil (zum Beispiel bei disabled), ist der Wert ein leerer String. Die Standardmeldung stellt der Browser in der Sprache seiner Oberfläche bereit, etwa „Wählen Sie ein Element in der Liste aus.“ Eine mit setCustomValidity() gesetzte Meldung wird genau so zurückgegeben, wie man sie übergeben hat.

In der Praxis nutzt man validationMessage, um Fehlermeldungen selbst darzustellen, etwa in einem eigenen Fehler-Element neben dem Feld statt in der Sprechblase des Browsers. Das kombiniert man meist mit dem Ereignis invalid, mit checkValidity() oder mit dem Attribut novalidate am Formular.

Rückgabewert

Typ
string
Beschreibung
Die lokalisierte Meldung zur Verletzung der Validierungsregeln. Ein leerer String, wenn das Element gültig ist oder nicht an der Validierung teilnimmt.

Beispiele

Meldung eines Pflicht-Auswahlfelds auslesen

// HTML: <select id="land" required>
//   <option value="">Bitte wählen …</option>
//   <option value="de">Deutschland</option>
// </select>
const select = document.getElementById('land');

console.log(select.validity.valueMissing); // true
console.log(select.validationMessage);

select.value = 'de';
console.log(JSON.stringify(select.validationMessage));
true Wählen Sie ein Element in der Liste aus. (Text hängt vom Browser ab) ""

Eigene Fehleranzeige statt Browser-Sprechblase

// HTML: <form id="bestellung" novalidate>
//   <select id="groesse" name="groesse" required>
//     <option value="">Größe wählen</option>
//     <option>S</option><option>M</option><option>L</option>
//   </select>
//   <span id="groesse-fehler" aria-live="polite"></span>
//   <button>Bestellen</button>
// </form>
const form = document.getElementById('bestellung');
const select = document.getElementById('groesse');
const fehler = document.getElementById('groesse-fehler');

const zeigeFehler = () => {
  fehler.textContent = select.validationMessage; // leer, wenn gültig
};

select.addEventListener('change', zeigeFehler);

form.addEventListener('submit', (event) => {
  if (!form.checkValidity()) {
    event.preventDefault();
    zeigeFehler();
  }
});

Eigene Regel mit setCustomValidity()

const zahlung = document.querySelector('#zahlung');   // <select>
const land = document.querySelector('#land');         // <select>

const pruefe = () => {
  if (zahlung.value === 'rechnung' && land.value !== 'de') {
    zahlung.setCustomValidity('Kauf auf Rechnung ist nur in Deutschland möglich.');
  } else {
    zahlung.setCustomValidity(''); // Fehler zurücksetzen
  }
  console.log(zahlung.validationMessage || '(gültig)');
};

zahlung.addEventListener('change', pruefe);
land.addEventListener('change', pruefe);
Kauf auf Rechnung ist nur in Deutschland möglich. (gültig)

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung an validationMessage wird still ignoriert, im Strict Mode wirft sie einen TypeError. Eigene Meldungen setzt man ausschließlich über setCustomValidity().
  • Fehler zurücksetzen: Eine mit setCustomValidity() gesetzte Meldung bleibt stehen, bis man setCustomValidity('') aufruft. Bis dahin gilt das Feld als ungültig, und das Formular lässt sich nicht absenden.
  • Text vom Browser abhängig: Die Standardmeldungen unterscheiden sich je nach Browser und Sprache der Oberfläche. Deshalb nie auf einen bestimmten Wortlaut prüfen. Für Programmlogik nutzt man validity, etwa validity.valueMissing.
  • Platzhalter-Option: required greift bei einem einfachen <select> nur, wenn die erste Option einen leeren value hat und nicht in einer <optgroup> steht. Sonst gilt diese erste Option als gültige Auswahl.
  • Deaktivierte Elemente (disabled) und Elemente innerhalb eines deaktivierten <fieldset> werden nicht validiert. Die Eigenschaft ist dann immer leer.
  • Barrierefreiheit: Eigene Fehleranzeigen sollte man mit aria-live oder aria-describedby mit dem Feld verknüpfen, damit Screenreader die Meldung vorlesen.
  • Browser: Die Eigenschaft wird von allen aktuellen Browsern unterstützt.