0Pricing
HTML Academy · Lektion

reportValidity und setCustomValidity

Lösen Sie die Validierungsoberfläche des Browsers aus und setzen Sie eigene Fehlermeldungen

reportValidity und setCustomValidity ist eine kostenlose HTML Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des HTML Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.

Zwei APIs für integrierte UX

Die Constraint Validation API stellt zwei Methoden bereit, die die integrierte Validierungsoberfläche des Browsers steuern: reportValidity (Tooltip anzeigen) und setCustomValidity (eine benutzerdefinierte Fehlermeldung bereitstellen). Zusammen können Sie Meldungen anpassen und zugleich die native Darstellung beibehalten.

reportValidity vs checkValidity

checkValidity() gibt stillschweigend true/false zurück – ohne Auswirkungen auf die Benutzeroberfläche. reportValidity() führt dieselbe Prüfung durch, setzt aber zusätzlich den Fokus auf das erste ungültige Feld und zeigt den Validierungstooltip des Browsers an. Wählen Sie reportValidity, wenn Sie die native Benutzerfreundlichkeit ohne zusätzlichen Aufwand nutzen möchten.

document.forms.signup.addEventListener("submit", (e) => {
  if (!e.target.reportValidity()) {
    e.preventDefault();
    // browser already focused first invalid field and showed tooltip
  }
});

Programmatische Validierung

Bei mehrstufigen Assistenten sollten Sie die Felder jedes Schritts vor dem Fortfahren validieren: if (step.reportValidity()) { next(); }. Der Browser übernimmt die Fehleranzeige und setzt den Fokus auf das Feld, das Aufmerksamkeit benötigt – Sie müssen die Fokusverwaltung nicht selbst implementieren.

setCustomValidity überschreibt Meldungen

Die Standardmeldungen („Bitte füllen Sie dieses Feld aus“) passen möglicherweise nicht zu Ihrem Tonfall. input.setCustomValidity("Username is required") ersetzt die Standardmeldung durch Ihren Text. Die Eingabe wird als ungültig behandelt, bis Sie die Meldung löschen.

Benutzerdefinierte Meldungen löschen

input.setCustomValidity("") entfernt die benutzerdefinierte Meldung und aktiviert die normale Validierung wieder. Rufen Sie dies bei jeder erneuten Validierung auf, da andernfalls veraltete benutzerdefinierte Meldungen bestehen bleiben, selbst nachdem der Benutzer das Problem behoben hat.

input.addEventListener("input", () => {
  if (input.value.length < 3) {
    input.setCustomValidity("Must be at least 3 characters");
  } else {
    input.setCustomValidity("");
  }
});

Asynchrone Validierung

Für serverseitige Prüfungen (etwa die Verfügbarkeit eines Benutzernamens oder die Gültigkeit eines Gutscheins) verwenden Sie setCustomValidity nach der asynchronen Antwort: const ok = await checkUsername(value); input.setCustomValidity(ok ? "" : "Already taken");. Der Browser übernimmt den neuen Gültigkeitsstatus sofort.

Mit einer benutzerdefinierten Fehleranzeige kombinieren

Wenn Sie Ihre eigene Fehleranzeige verwenden und trotzdem die Gültigkeitsverfolgung beibehalten möchten, reagieren Sie auf das invalid-Ereignis und rufen Sie e.preventDefault() auf, um den nativen Tooltip zu unterdrücken: input.addEventListener("invalid", (e) => { e.preventDefault(); showError(input, input.validationMessage); }).

Mehrere benutzerdefinierte Einschränkungen

setCustomValidity unterstützt jeweils nur eine benutzerdefinierte Meldung. Um mehrere Regeln durchzusetzen, prüfen Sie jede einzelne und rufen setCustomValidity mit der relevantesten Meldung in Prioritätsreihenfolge auf. Die erste verletzte Regel wird angezeigt.

Nicht mit der integrierten Validierung überschneiden

Wenn Sie für ein leeres Pflichtfeld eine benutzerdefinierte Meldung setzen, können Ihre Meldung und die Standardmeldung miteinander in Konflikt geraten. Wählen Sie pro Feld einen Ansatz: Deaktivieren Sie entweder die integrierte Einschränkung (verwenden Sie type="text" anstelle von type="email" und validieren Sie über setCustomValidity), oder verlassen Sie sich vollständig auf die integrierte Validierung.

Benutzerdefinierte Validierung auf Formularebene

Bei feldübergreifender Validierung (etwa beim Abgleich der Passwortbestätigung) wenden Sie setCustomValidity auf das zugehörige Feld an: confirmInput.setCustomValidity(confirmInput.value === passInput.value ? "" : "Passwords do not match"). Das Formular bleibt ungültig, bis beide Werte übereinstimmen.

Internationalisierung

Integrierte Meldungen werden vom Browser anhand der Sprache des Benutzers lokalisiert. Benutzerdefinierte Meldungen, die über setCustomValidity gesetzt werden, müssen Sie selbst in der richtigen Sprache bereitstellen. Lesen Sie navigator.language oder Ihren eigenen i18n-Status aus und liefern Sie die passende Übersetzung.

Testen

Öffnen Sie die DevTools und probieren Sie jeden ungültigen Ablauf aus: Absenden eines leeren Formulars, unvollständige Eingaben, nicht übereinstimmende Formate und asynchrone Fehler. Überprüfen Sie, ob die richtige Meldung angezeigt wird, ob das Beheben des Problems sie löscht und ob ein gültiges Formular abgesendet wird. Sonderfälle wie das Einfügen eines ungültigen Formats oder das automatische Ausfüllen durch den Browser verdienen eigene Tests.

Wissenscheck

Wie teilen Sie dem Browser mit, dass die Eingabe nach dem Aufruf von input.setCustomValidity("Already taken") wieder gültig ist?

Zusammenfassung

reportValidity löst die integrierte Validierungsoberfläche des Browsers aus (Fokus und Tooltip) und eignet sich daher ideal für programmatische Prüfungen. setCustomValidity überschreibt Standardmeldungen mit Ihrem Text – löschen Sie ihn mit einer leeren Zeichenfolge, sobald die Eingabe wieder gültig ist. Reagieren Sie mit preventDefault auf das invalid-Ereignis, um vollständig eigene Fehleranzeigen zu erstellen. Verwenden Sie diese Möglichkeiten für feldübergreifende Validierung, asynchrone Prüfungen und lokalisierte benutzerdefinierte Meldungen.

Häufig gestellte Fragen

Ist die Lektion „reportValidity und setCustomValidity“ kostenlos?

Ja — der vollständige Text von „reportValidity und setCustomValidity“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des HTML Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „reportValidity und setCustomValidity“?

Lösen Sie die Validierungsoberfläche des Browsers aus und setzen Sie eigene Fehlermeldungen Du übst HTML Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um HTML Academy zu starten?

Keine Vorkenntnisse erforderlich. HTML Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „reportValidity und setCustomValidity“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser HTML Academy-Lektion Code schreiben und ausführen?

Ja. Jede HTML Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Die FormData API
  2. Die Constraint Validation API
  3. reportValidity und setCustomValidity
  4. Formular-Reset-Ereignisse und Zustandsverwaltung
← Zurück zu HTML Academy