Signatur
Beschreibung
Die Eigenschaft willValidate gehört zur Constraint Validation API, also der Formularvalidierung im Browser. Sie zeigt an, ob ein Element bei der Formularvalidierung (form.checkValidity(), reportValidity() oder beim Absenden) geprüft wird. Beim HTMLObjectElement ist der Wert laut HTML-Spezifikation immer false: <object> ist zwar ein formularzugehöriges (listed) Element und kann ein form-Attribut haben, wird aber grundsätzlich von der Validierung ausgeschlossen (barred from constraint validation).
Die Eigenschaft gibt es beim <object>-Element vor allem, damit alle formularzugehörigen Elemente dieselbe Schnittstelle haben. Das hilft bei allgemeinem Code, der über form.elements läuft und für jedes Element prüft, ob es validiert wird – ganz ohne Sonderfälle für bestimmte Elementtypen.
Passend dazu liefert checkValidity() bei einem <object> immer true, validity.valid ist true und validationMessage ist ein leerer String. Auch setCustomValidity() ändert daran nichts, weil das Element nicht geprüft wird.
Beispiele
Wert direkt abfragen
const obj = document.createElement('object');
obj.data = 'dokument.pdf';
obj.type = 'application/pdf';
document.body.append(obj);
console.log(obj.willValidate);
Nur validierbare Formularelemente durchlaufen
// HTML: <form id="anmeldung"><input name="mail" type="email" required><object name="vorschau" data="info.svg"></object><button>Senden</button></form>
const form = document.getElementById('anmeldung');
const geprueft = [...form.elements]
.filter((el) => el.willValidate)
.map((el) => el.name || el.tagName.toLowerCase());
console.log(geprueft);
setCustomValidity hat keine Wirkung
const obj = document.createElement('object');
obj.setCustomValidity('Bitte Datei auswählen');
console.log(obj.willValidate); // false
console.log(obj.checkValidity()); // true
console.log(obj.validationMessage === '');
// Wichtig · Fallstricke
- Kein Validierungsersatz: Soll der Inhalt eines
<object>(etwa ein eingebettetes Dokument) geprüft werden, musst du das selbst erledigen, z. B. mit einem versteckten<input>undsetCustomValidity(). - Schreibgeschützt: Zuweisungen wie
obj.willValidate = truewerden ignoriert. Im Strict Mode lösen sie einenTypeErroraus, weil nur ein Getter definiert ist. - Das Verhalten ist in allen aktuellen Browsern einheitlich. Ältere Browser vor HTML5 kennen die Constraint Validation API gar nicht; dort ist der Wert
undefined. - Nicht verwechseln mit
HTMLInputElement.willValidate: Dort hängt der Wert unter anderem vondisabled,readonlyund dem Typ ab (z. B.hidden).