Signatur
Beschreibung
Die schreibgeschützte Eigenschaft valueMissing des ValidityState-Objekts zeigt an, ob ein Formularelement mit dem Attribut required keinen Wert hat. Sie ist true, wenn das Pflichtfeld leer ist, sonst false. Erreichbar ist sie über die Eigenschaft validity eines Elements, z. B. input.validity.valueMissing.
Die Bedeutung von „leer“ hängt vom Elementtyp ab:
- Text-Eingaben und
<textarea>: Der Wert ist ein leerer String. - Checkbox: Die Box ist nicht angehakt.
- Radio-Gruppe: Kein Button der Gruppe (gleicher
name) ist ausgewählt, sofern mindestens einerrequiredträgt. <select>: Die gewählte Option hat einen leerenvalue(typischerweise eine Platzhalter-Option).type="file": Es wurde keine Datei ausgewählt.
Sinnvoll ist die Eigenschaft, wenn man eigene Fehlermeldungen anzeigen möchte: Statt der allgemeinen Browser-Meldung prüft man gezielt valueMissing und gibt z. B. „Bitte geben Sie Ihre E-Mail-Adresse ein.“ aus. Sobald ein Element mit valueMissing === true vorliegt, ist auch validity.valid gleich false, und das Formular wird ohne novalidate nicht abgeschickt.
Rückgabewert
true, wenn das Element required ist und keinen Wert hat, sonst false.Beispiele
Pflichtfeld einfach prüfen
// HTML: <input id="name" required>
const input = document.querySelector('#name');
console.log(input.validity.valueMissing); // Feld leer
input.value = 'Anna';
console.log(input.validity.valueMissing); // Feld gefüllt
Eigene Fehlermeldung beim Eingeben und Absenden
// HTML:
// <form id="kontakt">
// <input type="email" id="email" required>
// <span id="fehler" aria-live="polite"></span>
// <button>Senden</button>
// </form>
const form = document.querySelector('#kontakt');
const email = document.querySelector('#email');
const fehler = document.querySelector('#fehler');
const pruefen = () => {
const { validity } = email;
if (validity.valueMissing) {
email.setCustomValidity('Bitte geben Sie Ihre E-Mail-Adresse ein.');
} else if (validity.typeMismatch) {
email.setCustomValidity('Das ist keine gültige E-Mail-Adresse.');
} else {
email.setCustomValidity('');
}
fehler.textContent = email.validationMessage;
};
email.addEventListener('input', pruefen);
form.addEventListener('submit', (event) => {
pruefen();
if (!form.checkValidity()) {
event.preventDefault();
email.focus();
}
});
Select mit Platzhalter und Checkbox
// HTML:
// <select id="land" required>
// <option value="">Bitte wählen …</option>
// <option value="de">Deutschland</option>
// </select>
// <input type="checkbox" id="agb" required>
const land = document.querySelector('#land');
const agb = document.querySelector('#agb');
console.log(land.validity.valueMissing); // Platzhalter gewählt
land.value = 'de';
console.log(land.validity.valueMissing);
console.log(agb.validity.valueMissing); // nicht angehakt
agb.checked = true;
console.log(agb.validity.valueMissing);
// Wichtig · Fallstricke
- Nur mit
required: Ohne das Attribut istvalueMissingimmerfalse, auch bei leerem Feld. - Leerzeichen zählen als Wert: Ein Textfeld mit
" "gilt nicht als leer. Wer das verhindern will, braucht zusätzlich einpattern(z. B.pattern=".*\S.*") oder eine eigene Prüfung. - Deaktivierte und schreibgeschützte Felder: Elemente mit
disabledoderreadonlysowietype="hidden"sind von der Validierung ausgenommen. Dort liefertvalueMissingfalse. setCustomValidity()zurücksetzen: Eine eigene Meldung setztcustomErrorund macht das Feld ungültig, bis sie mitsetCustomValidity('')gelöscht wird. Sonst bleibt das Formular blockiert, obwohl das Feld inzwischen gefüllt ist.- Clientseitige Prüfung reicht nicht:
valueMissingdient nur der Benutzerfreundlichkeit. Pflichtfelder müssen auf dem Server immer erneut geprüft werden. - Kompatibilität: Wird von allen aktuellen Browsern unterstützt. Bei Custom Elements erhält man den Wert über
ElementInternals.validity, gesetzt wird er mitsetValidity({ valueMissing: true }, …).