Start · Sprachen · JavaScript · Referenz · HTMLButtonElement.validity

HTMLButtonElement.validity

Eigenschaft

Gibt ein schreibgeschütztes <code>ValidityState</code>-Objekt zurück, das den aktuellen Gültigkeitszustand des Buttons für die Formularvalidierung beschreibt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLButtonElement.validity

Beschreibung

Die Eigenschaft validity liefert ein ValidityState-Objekt mit booleschen Eigenschaften wie valid, customError, valueMissing oder patternMismatch. Das Objekt ist live: Es liefert bei jedem Zugriff den aktuellen Zustand und ist immer dieselbe Instanz, sodass man sich eine Referenz merken kann.

Anders als bei <input> hat ein <button> keine Attribute wie required, pattern oder min. Praktisch relevant ist daher fast nur customError, das über setCustomValidity() gesetzt wird. Alle anderen Fehlerflags sind bei Buttons immer false.

Wichtig: Nur Buttons mit type="submit" (der Standardwert) nehmen an der Constraint-Validierung teil. Buttons mit type="button" oder type="reset" sowie deaktivierte Buttons sind von der Validierung ausgeschlossen. Bei ihnen ist willValidate gleich false, und sie blockieren das Absenden des Formulars nie, selbst wenn ein eigener Fehler gesetzt ist.

Typischer Einsatz: Ein Submit-Button wird über setCustomValidity() als ungültig markiert, etwa solange eine Bedingung außerhalb der Formularfelder nicht erfüllt ist. Mit validity.valid oder validity.customError fragt man diesen Zustand gezielt ab.

Rückgabewert

Typ
ValidityState
Beschreibung
Live-ValidityState-Objekt mit den Flags valid, customError, valueMissing, typeMismatch, patternMismatch, tooLong, tooShort, rangeUnderflow, rangeOverflow, stepMismatch und badInput. Bei Buttons ist in der Praxis nur customError veränderlich.

Beispiele

Gültigkeitszustand eines Submit-Buttons auslesen

const button = document.createElement('button'); // type="submit" ist Standard
document.body.append(button);

console.log(button.validity.valid);       // Standardzustand
console.log(button.validity.customError);

button.setCustomValidity('Bitte zuerst die AGB akzeptieren.');
console.log(button.validity.valid);
console.log(button.validity.customError);
console.log(button.validationMessage);
true false false true Bitte zuerst die AGB akzeptieren.

Absenden sperren, bis eine externe Bedingung erfüllt ist

// HTML: <form id="order"><input type="checkbox" id="agb"><button id="send">Bestellen</button></form>
const form = document.querySelector('#order');
const agb = document.querySelector('#agb');
const send = document.querySelector('#send');

const update = () => {
  send.setCustomValidity(agb.checked ? '' : 'Bitte die AGB bestätigen.');
};
agb.addEventListener('change', update);
update();

form.addEventListener('submit', (event) => {
  if (!send.validity.valid) {
    event.preventDefault();
    send.reportValidity(); // zeigt die Meldung an
  }
});

type="button" ist von der Validierung ausgeschlossen

const btn = document.createElement('button');
btn.type = 'button';
btn.setCustomValidity('Fehler');

console.log(btn.willValidate);          // nimmt nicht teil
console.log(btn.validity.customError);  // Flag ist trotzdem gesetzt
console.log(btn.checkValidity());       // aber keine Validierung
false true true

// Wichtig · Fallstricke

  • Nur Submit-Buttons zählen: Bei type="button", type="reset" und deaktivierten Buttons (disabled) ist willValidate gleich false. Ein gesetzter customError blockiert das Formular dann nicht, und checkValidity() liefert true.
  • Fehler zurücksetzen: Ein eigener Fehler bleibt bestehen, bis setCustomValidity('') mit einem leeren String aufgerufen wird. Wird das vergessen, lässt sich das Formular dauerhaft nicht absenden.
  • Schreibgeschützt: Eine Zuweisung an validity oder an dessen Flags wird ignoriert (im Strict Mode gibt es einen TypeError bei den Flags). Den Zustand ändert man nur über setCustomValidity().
  • novalidate: Hat das Formular novalidate oder der Button formnovalidate, wird beim Absenden nicht validiert. validity zeigt den Zustand aber weiterhin korrekt an.
  • Wird von allen modernen Browsern unterstützt (Baseline).