Signatur
Beschreibung
Die Eigenschaft willValidate gibt true zurück, wenn das <button>-Element ein Kandidat für die Constraint-Validierung ist. Andernfalls gibt sie false zurück. Nur Kandidaten werden bei form.checkValidity(), form.reportValidity() und beim Absenden des Formulars geprüft.
Ein Button ist von der Validierung ausgeschlossen (willValidate === false), wenn mindestens eine dieser Bedingungen zutrifft:
- Sein
typeist"button"oder"reset". Nurtype="submit"(der Standardwert) ist validierbar. - Er ist deaktiviert, entweder über das eigene Attribut
disabledoder über ein deaktiviertes<fieldset>, in dem er liegt. - Er liegt innerhalb eines
<datalist>-Elements.
In der Praxis ist die Eigenschaft vor allem wichtig, wenn Sie mit setCustomValidity() eigene Fehlermeldungen an einen Submit-Button hängen. Das ist z. B. sinnvoll, um das Absenden bei einer ungültigen Geschäftslogik zu blockieren. Ist willValidate false, wird diese Meldung ignoriert. Außerdem eignet sich die Eigenschaft für eigene Validierungsroutinen, die alle Formularelemente durchlaufen und nicht validierbare Elemente überspringen sollen.
Rückgabewert
true, wenn der Button an der Constraint-Validierung teilnimmt, sonst false.Beispiele
Validierbarkeit je nach Button-Typ prüfen
const form = document.createElement('form');
form.innerHTML = `
<button id="senden">Senden</button>
<button id="normal" type="button">Klick</button>
<button id="zurueck" type="reset">Zurücksetzen</button>
<button id="aus" type="submit" disabled>Aus</button>
`;
document.body.append(form);
for (const btn of form.querySelectorAll('button')) {
console.log(`${btn.id}: ${btn.willValidate}`);
}
Eigene Fehlermeldung am Submit-Button nur bei Kandidaten setzen
const form = document.querySelector('#bestellung');
const submitBtn = form.querySelector('button[type="submit"]');
const agb = form.querySelector('#agb');
const pruefeAgb = () => {
if (!submitBtn.willValidate) return; // Button wird ohnehin nicht geprüft
submitBtn.setCustomValidity(
agb.checked ? '' : 'Bitte akzeptieren Sie zuerst die AGB.'
);
};
agb.addEventListener('change', pruefeAgb);
pruefeAgb();
form.addEventListener('submit', (event) => {
if (!form.reportValidity()) event.preventDefault();
});
Deaktiviertes fieldset schließt Buttons aus
const fieldset = document.createElement('fieldset');
const btn = document.createElement('button'); // type="submit" ist Standard
fieldset.append(btn);
document.body.append(fieldset);
console.log(btn.willValidate); // true
fieldset.disabled = true;
console.log(btn.willValidate); // false
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
btn.willValidate = falsewird still ignoriert. Im Strict Mode löst sie einenTypeErroraus. Um einen Button auszuschließen, ändern Sie stattdessentypeoderdisabled. - Nicht mit Gültigkeit verwechseln:
willValidatesagt nur, ob geprüft wird. Ob das Element gültig ist, steht invalidity.validbzw. ergibt sich auscheckValidity(). - Ein Button ohne
type-Attribut ist ein Submit-Button und damit standardmäßig ein Kandidat. Ein ungültigertype-Wert fällt ebenfalls auf"submit"zurück. - Ein Button muss nicht in einem
<form>liegen, damitwillValidatetrueist. - Kompatibilität: Die Eigenschaft wird seit vielen Jahren von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge).