Signatur
Beschreibung
Die Eigenschaft form von HTMLFieldSetElement gibt das Formular zurück, dem ein <fieldset>-Element zugeordnet ist, als HTMLFormElement. Ist das Fieldset keinem Formular zugeordnet, ist der Wert null.
Die Zuordnung ergibt sich auf zwei Wegen: Entweder liegt das Fieldset im DOM innerhalb eines <form>-Elements, oder es verweist über das HTML-Attribut form="formular-id" auf ein Formular an beliebiger Stelle im Dokument. Das Attribut hat Vorrang vor der Verschachtelung. Verweist das Attribut auf eine ID, die es nicht gibt oder die zu keinem <form> gehört, ist der Wert null, auch wenn das Fieldset in einem Formular steckt.
Nützlich ist das, wenn du von einer Fieldset-Gruppe aus auf das ganze Formular zugreifen willst, etwa um es abzusenden, zurückzusetzen oder zu prüfen. So musst du nicht mit closest('form') den DOM-Baum hinauflaufen, und das funktioniert auch mit Formularen, die über das form-Attribut zugeordnet sind.
Rückgabewert
null, wenn es keins gibt.Beispiele
Fieldset innerhalb eines Formulars
// HTML:
// <form id="anmeldung">
// <fieldset id="kontakt"><legend>Kontakt</legend>
// <input name="email" type="email">
// </fieldset>
// </form>
const fieldset = document.getElementById('kontakt');
console.log(fieldset.form?.id);
console.log(fieldset.form instanceof HTMLFormElement);
Zuordnung über das form-Attribut außerhalb des Formulars
// HTML:
// <form id="bestellung"></form>
// <fieldset id="lieferung" form="bestellung">
// <input name="strasse">
// </fieldset>
// <fieldset id="lose"></fieldset>
const lieferung = document.getElementById('lieferung');
const lose = document.getElementById('lose');
console.log(lieferung.form?.id); // Zuordnung über das Attribut
console.log(lose.form); // kein Formular
Formular aus einer Fieldset-Gruppe heraus prüfen und absenden
const fieldset = document.querySelector('fieldset.zahlung');
const button = fieldset.querySelector('button.weiter');
button.addEventListener('click', () => {
const form = fieldset.form;
if (!form) {
console.warn('Fieldset ist keinem Formular zugeordnet');
return;
}
// requestSubmit() löst Validierung und das submit-Event aus
if (form.reportValidity()) {
form.requestSubmit();
}
});
Die Eigenschaft ist schreibgeschützt
const fieldset = document.querySelector('fieldset');
const anderesFormular = document.createElement('form');
fieldset.form = anderesFormular; // wird ignoriert (im strict mode: TypeError)
console.log(fieldset.form === anderesFormular);
// Zuordnung stattdessen über das Attribut ändern:
anderesFormular.id = 'neu';
document.body.append(anderesFormular);
fieldset.setAttribute('form', 'neu');
console.log(fieldset.form.id);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
fieldset.formwird still ignoriert, im strict mode (also auch in ES-Modulen) gibt es einenTypeError. Die Zuordnung änderst du übersetAttribute('form', id). - Attribut hat Vorrang: Ist das
form-Attribut gesetzt, aber ungültig (ID fehlt oder gehört zu keinem<form>), liefert die Eigenschaftnull, auch wenn das Fieldset in einem Formular liegt. - Fieldset-Elemente werden nicht abgesendet: Das Fieldset selbst schickt keine Daten mit. Es taucht aber in
form.elementsauf, und überfieldset.elementskommst du an die enthaltenen Steuerelemente. - Die Zuordnung per
form-Attribut verbindet das Fieldset selbst mit dem Formular, nicht automatisch seine Kind-Elemente. Diese brauchen bei Bedarf ein eigenesform-Attribut. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Zum Programmieren lohnt sich optionale Verkettung (
fieldset.form?.…), weilnullmöglich ist.