Signatur
Beschreibung
Die Eigenschaft form eines HTMLOutputElement gibt das Formular zurück, das dieses <output>-Element besitzt (englisch „form owner“). Ist das Element keinem Formular zugeordnet, ist der Wert null.
Wie das Formular bestimmt wird:
- Hat das
<output>einform-Attribut, wird das Formular mit dieseridim selben Dokument verwendet – auch wenn das Element außerhalb des<form>steht. - Ohne Attribut ist es das nächstgelegene umschließende
<form>-Element. - Verweist das Attribut auf eine nicht existierende
idoder auf ein Element, das kein Formular ist, ergibt sichnull.
Praktisch ist die Eigenschaft, wenn man in einem Event-Handler vom Ausgabefeld aus auf das zugehörige Formular und dessen andere Steuerelemente (form.elements) zugreifen will, ohne die DOM-Struktur fest zu verdrahten. So lassen sich wiederverwendbare Berechnungsfunktionen schreiben, die für mehrere Formulare auf einer Seite funktionieren.
Rückgabewert
HTMLFormElement oder null, wenn das <output> keinem Formular zugeordnet ist.Beispiele
Zugehöriges Formular ermitteln
// HTML:
// <form id="rechner">
// <input name="a" type="number" value="2"> +
// <input name="b" type="number" value="3"> =
// <output name="ergebnis" id="ergebnis"></output>
// </form>
const output = document.getElementById('ergebnis');
console.log(output.form);
console.log(output.form.id);
Output außerhalb des Formulars per form-Attribut
// HTML:
// <form id="bestellung">
// <input name="menge" type="number" value="4">
// <input name="preis" type="number" value="2.5">
// </form>
// <output id="summe" form="bestellung" for="menge preis"></output>
// <output id="lose"></output>
const summe = document.getElementById('summe');
const lose = document.getElementById('lose');
console.log(summe.form?.id); // trotz Position außerhalb zugeordnet
console.log(lose.form); // keinem Formular zugeordnet
Wiederverwendbare Berechnung über output.form
// Funktioniert für beliebig viele Formulare mit Feldern a, b und output[name=ergebnis]
const aktualisiere = (output) => {
const form = output.form;
if (!form) return; // ohne Formular nichts zu tun
const a = form.elements.a.valueAsNumber || 0;
const b = form.elements.b.valueAsNumber || 0;
output.value = String(a + b);
};
document.querySelectorAll('output[name="ergebnis"]').forEach((output) => {
output.form?.addEventListener('input', () => aktualisiere(output));
aktualisiere(output);
});
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
output.form = otherFormwird ignoriert (im Strict Mode ggf.TypeError). Um die Zuordnung zu ändern, das Attribut setzen:output.setAttribute('form', 'andereId'). - Nicht verwechseln: die Eigenschaft
formliefert ein Objekt, das HTML-Attributformdagegen eineid-Zeichenkette. Den Attributwert erhält man mitgetAttribute('form'). - Verweist das
form-Attribut auf eine unbekannteid, ist der Wertnull– selbst wenn das Element in einem<form>verschachtelt ist. <output>wird zwar inform.elementsaufgeführt, sein Wert wird beim Absenden aber nicht übertragen.- Kompatibilität: wird von allen modernen Browsern unterstützt; der Internet Explorer kennt
<output>nicht.