Signatur
Beschreibung
Die schreibgeschützte Eigenschaft validity gibt ein ValidityState-Objekt zurück. Es zeigt den aktuellen Validierungszustand eines <input>-Elements. Jede boolesche Eigenschaft steht für eine bestimmte Regel der HTML-Formularvalidierung, zum Beispiel required, pattern, min/max, minlength/maxlength, step oder den Eingabetyp (email, url …).
Das Objekt hat folgende Eigenschaften:
valueMissing: Das Pflichtfeld (required) ist leer.typeMismatch: Der Wert passt nicht zum Typ, z. B. beitype="email"odertype="url".patternMismatch: Der Wert entspricht nicht dem Attributpattern.tooLong/tooShort: Die Länge verletztmaxlengthbzw.minlength.rangeUnderflow/rangeOverflow: Der Wert liegt unterminbzw. übermax.stepMismatch: Der Wert passt nicht zum Raster vonstep.badInput: Der Browser kann die Eingabe nicht umwandeln, z. B. Buchstaben intype="number".customError: MitsetCustomValidity()wurde eine eigene Fehlermeldung gesetzt.valid:true, wenn keine der oben genannten Bedingungen zutrifft.
Mit validity kannst du eigene, genaue Fehlermeldungen anzeigen, statt dich auf die Standard-Hinweise des Browsers zu verlassen. Gebräuchlich ist das zusammen mit dem Attribut novalidate am Formular, mit den Events input und invalid sowie mit setCustomValidity(). Das Objekt ist „live“: Es gibt immer den aktuellen Zustand wieder, auch wenn du es zuvor in einer Variable gespeichert hast.
Rückgabewert
ValidityState-Objekt mit booleschen Eigenschaften wie valid, valueMissing, typeMismatch, patternMismatch, tooLong, tooShort, rangeUnderflow, rangeOverflow, stepMismatch, badInput und customError.Beispiele
Validierungszustand eines Pflichtfelds abfragen
const input = document.createElement('input');
input.type = 'email';
input.required = true;
console.log(input.validity.valueMissing); // leer + required
console.log(input.validity.valid);
input.value = 'keine-mail';
console.log(input.validity.typeMismatch);
input.value = 'max@example.com';
console.log(input.validity.valid);
Eigene Fehlermeldungen je nach Fehlerart
// HTML: <form novalidate><input id="alter" type="number" min="18" max="120" required><span id="fehler"></span></form>
const feld = document.querySelector('#alter');
const fehler = document.querySelector('#fehler');
const meldung = (v) => {
if (v.valueMissing) return 'Bitte gib dein Alter ein.';
if (v.badInput) return 'Bitte nur Zahlen eingeben.';
if (v.rangeUnderflow) return `Mindestalter ist ${feld.min} Jahre.`;
if (v.rangeOverflow) return `Höchstens ${feld.max} Jahre erlaubt.`;
return '';
};
feld.addEventListener('input', () => {
fehler.textContent = feld.validity.valid ? '' : meldung(feld.validity);
});
Eigene Regel mit setCustomValidity und customError
// HTML: <input id="pw" type="password"> <input id="pw2" type="password">
const pw = document.querySelector('#pw');
const pw2 = document.querySelector('#pw2');
const pruefen = () => {
pw2.setCustomValidity(pw.value === pw2.value ? '' : 'Passwörter stimmen nicht überein.');
console.log('customError:', pw2.validity.customError, '| valid:', pw2.validity.valid);
};
pw.addEventListener('input', pruefen);
pw2.addEventListener('input', pruefen);
Alle gesetzten Fehler-Flags auflisten
const input = document.createElement('input');
input.pattern = '[A-Z]{3}';
input.maxLength = 5;
input.value = 'abc';
const flags = [];
for (const key in input.validity) {
if (key !== 'valid' && input.validity[key]) flags.push(key);
}
console.log(flags);
// Wichtig · Fallstricke
- Schreibgeschützt: Die Eigenschaften von
ValidityStatelassen sich nicht direkt setzen. Einen eigenen Fehlerzustand erzeugst du nur mitsetCustomValidity('Meldung'). Zum Zurücksetzen rufst dusetCustomValidity('')auf, sonst bleibt das Feld dauerhaft ungültig. - tooLong/tooShort: Diese Flags werden meist nur nach echter Nutzereingabe gesetzt. Einen per Skript zugewiesenen
valueprüfen die Browser dabei in der Regel nicht. - Ausgenommene Felder: Elemente mit
disabledoderreadonlysowie die Typenhidden,buttonundresetwerden nicht validiert (willValidate === false).validity.validist bei ihnen trotzdemtrue. - badInput: Bei
type="number"istvaluebei ungültiger Eingabe ein leerer String. Nurvalidity.badInputzeigt, dass der Nutzer tatsächlich etwas eingetippt hat. - Sicherheit: Die Prüfung im Browser dient nur dem Bedienkomfort. Man kann sie leicht umgehen, deshalb müssen die Daten immer auch auf dem Server geprüft werden.
- Kompatibilität: Wird von allen aktuellen Browsern unterstützt. Dieselbe Eigenschaft gibt es auch bei
HTMLSelectElement,HTMLTextAreaElement,HTMLButtonElement,HTMLFieldSetElement,HTMLOutputElementundHTMLObjectElement.