Signatur
Beschreibung
Die Eigenschaft validationMessage gehört zur Constraint Validation API. Sie gibt einen lokalisierten Text zurück, der erklärt, welche Validierungsregel ein Formular-Steuerelement verletzt. HTMLObjectElement implementiert diese API, weil ein <object>-Element über das Attribut form einem Formular zugeordnet werden kann und damit als listed element gilt.
Laut HTML-Spezifikation ist ein <object>-Element aber nie ein Kandidat für die Formularvalidierung. Deshalb ist willValidate immer false, checkValidity() liefert immer true, und validationMessage gibt immer einen leeren String ("") zurück. Das gilt selbst dann, wenn vorher setCustomValidity() mit einer Meldung aufgerufen wurde.
Die Eigenschaft ist trotzdem nützlich: Generischer Code, der alle Elemente aus form.elements durchgeht und Fehlermeldungen einsammelt, kann sie ohne Sonderfall verwenden. <object>-Elemente verursachen dann einfach nie eine Meldung.
Rückgabewert
<object> ist das immer der leere String "", weil das Element nicht validiert wird.Beispiele
Meldung eines object-Elements auslesen
// <form id="f"><object id="media" data="film.mp4" type="video/mp4"></object></form>
const obj = document.getElementById('media');
console.log(obj.willValidate); // wird nicht validiert
console.log(JSON.stringify(obj.validationMessage));
setCustomValidity() hat keine Wirkung auf die Meldung
const obj = document.createElement('object');
document.body.append(obj);
obj.setCustomValidity('Plugin fehlt!');
console.log(JSON.stringify(obj.validationMessage));
console.log(obj.checkValidity());
Fehlermeldungen aller Formularelemente generisch einsammeln
// <form id="bestellung">
// <input name="email" type="email" required>
// <object name="vorschau" data="vorschau.pdf"></object>
// </form>
const form = document.getElementById('bestellung');
const fehler = [...form.elements]
.filter((el) => el.validationMessage !== '')
.map((el) => `${el.name}: ${el.validationMessage}`);
// Das <object> taucht nie auf – nur echte Validierungsfehler
console.log(fehler);
// Wichtig · Fallstricke
- Immer leer: Weil
<object>von der Validierung ausgeschlossen ist, gibt die Eigenschaft immer""zurück. Für eigene Prüfungen, etwa ob eine eingebettete Ressource geladen wurde, taugt sie nicht. Prüfen Sie stattdessen z. B. dasload/error-Ereignis odercontentDocument. - Schreibgeschützt: Eine Zuweisung wie
obj.validationMessage = "…"wird stillschweigend ignoriert und wirft im Strict Mode einenTypeError. - Lokalisierung: Bei anderen Elementen wie
<input>hängt der Meldungstext von Browser und Sprache ab. Vergleichen Sie im Code daher nie mit festen Texten, sondern mitvalidity-Flags. - Kompatibilität: Wird von allen aktuellen Browsern unterstützt.