Start · Sprachen · JavaScript · Referenz · HTMLObjectElement.reportValidity()

HTMLObjectElement.reportValidity()

Methode

Prüft wie <code>checkValidity()</code> die Gültigkeit des <code>&lt;object&gt;</code>-Elements und würde Probleme dem Benutzer melden – liefert bei <code>&lt;object&gt;</code> praktisch immer <code>true</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome 40+, Firef Kategorie: webapi

Signatur

HTMLObjectElement.prototype.reportValidity()

Beschreibung

Die Methode reportValidity() gehört zur Constraint Validation API und ist auf allen formularbezogenen Elementen vorhanden, also auch auf HTMLObjectElement. Sie führt dieselben Prüfschritte aus wie checkValidity(): Ist das Element ungültig, wird ein abbrechbares invalid-Ereignis ausgelöst und – falls dieses nicht abgebrochen wird – dem Benutzer eine Fehlermeldung angezeigt.

Wichtig: Laut HTML-Spezifikation sind <object>-Elemente von der Constraint-Validierung ausgeschlossen („barred from constraint validation“). Deshalb ist willValidate stets false, validationMessage ist ein leerer String, und reportValidity() gibt immer true zurück – auch nach einem Aufruf von setCustomValidity(). Ein invalid-Ereignis wird nie ausgelöst.

Die Methode existiert vor allem aus Gründen der Einheitlichkeit: Code, der generisch über form.elements iteriert und auf jedem Element reportValidity() aufruft, funktioniert so ohne Sonderfälle. Wenn Sie echte Validierung für eingebettete Inhalte brauchen, müssen Sie diese selbst in JavaScript umsetzen oder ein verstecktes <input> als Stellvertreter validieren.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Element gültig ist, sonst false. Da <object> von der Validierung ausgeschlossen ist, ist der Rückgabewert in der Praxis immer true.

Beispiele

Einfacher Aufruf auf einem &lt;object&gt;-Element

// HTML: <form><object id="pdf" data="handbuch.pdf" type="application/pdf"></object></form>
const obj = document.getElementById('pdf');

console.log(obj.willValidate);      // Nimmt das Element an der Validierung teil?
console.log(obj.reportValidity());  // Gültig?
false true

setCustomValidity() hat keine Wirkung

const obj = document.createElement('object');
document.body.append(obj);

obj.addEventListener('invalid', () => console.log('invalid ausgelöst'));
obj.setCustomValidity('Bitte zuerst das Dokument laden.');

console.log(JSON.stringify(obj.validationMessage));
console.log(obj.reportValidity());
"" true

Generische Formularprüfung über form.elements

// Alle Formularelemente prüfen – <object> wird ohne Sonderbehandlung mitgeprüft
const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
  const invalid = [...form.elements].filter((el) => !el.reportValidity());
  if (invalid.length > 0) {
    event.preventDefault();
    console.log(`Ungültige Felder: ${invalid.map((el) => el.name || el.tagName).join(', ')}`);
  }
});

Eigene Prüfung für eingebettete Inhalte

// Da reportValidity() bei <object> nichts meldet, eigene Logik ergänzen
const obj = document.querySelector('object');
const hint = document.querySelector('#pdf-hinweis'); // verstecktes <input required>

const isLoaded = () => obj.contentDocument !== null || obj.data !== '';

hint.setCustomValidity(isLoaded() ? '' : 'Das eingebettete Dokument fehlt.');
console.log(obj.reportValidity() && hint.reportValidity());
false (wenn kein Dokument eingebunden ist)

// Wichtig · Fallstricke

  • Immer true: <object> ist von der Constraint-Validierung ausgeschlossen. Verlassen Sie sich für eingebettete Inhalte nicht auf reportValidity(), setCustomValidity() oder das invalid-Ereignis.
  • Bei anderen Elementen zeigt reportValidity() sichtbar eine Browser-Meldung an und kann den Fokus verschieben. Das ist ein Unterschied zu checkValidity(), das still prüft.
  • Ältere Browser (z. B. Internet Explorer) kennen reportValidity() nicht. Bei Bedarf per typeof el.reportValidity === 'function' prüfen und notfalls auf checkValidity() ausweichen.
  • Das Aussehen und der Text der Browser-Fehlermeldung sind nicht einheitlich und lassen sich nicht per CSS gestalten.