Start · Sprachen · JavaScript · Referenz · HTMLObjectElement.willValidate

HTMLObjectElement.willValidate

Eigenschaft

Schreibgeschützte Eigenschaft, die bei <code>&lt;object&gt;</code>-Elementen immer <code>false</code> liefert, weil sie nie an der Einschränkungsvalidierung teilnehmen.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLObjectElement.willValidate

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);
false

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);
["mail", "button"]

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 === '');
false true true

// 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> und setCustomValidity().
  • Schreibgeschützt: Zuweisungen wie obj.willValidate = true werden ignoriert. Im Strict Mode lösen sie einen TypeError aus, 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 von disabled, readonly und dem Typ ab (z. B. hidden).