Start · Sprachen · JavaScript · Referenz · HTMLButtonElement.formMethod

HTMLButtonElement.formMethod

Eigenschaft

Liest oder setzt die HTTP-Methode (<code>get</code>, <code>post</code>, <code>dialog</code>), mit der das Formular übermittelt wird, wenn dieser Button das Absenden auslöst.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

HTMLButtonElement.formMethod

Beschreibung

Die Eigenschaft formMethod spiegelt das HTML-Attribut formmethod eines <button>-Elements wider. Sie legt fest, mit welcher Methode das zugehörige Formular übermittelt wird, wenn genau dieser Button das Absenden auslöst. Dabei überschreibt sie das Attribut method des <form>-Elements, aber nur für diesen einen Absendevorgang.

Gültige Werte sind:

  • "get": Die Formulardaten werden als Query-String an die URL angehängt.
  • "post": Die Formulardaten werden im Anfragekörper gesendet.
  • "dialog": Befindet sich das Formular in einem <dialog>, wird der Dialog geschlossen und keine Anfrage gesendet.

Die Eigenschaft ist ein aufgezählter Wert: Beim Lesen bekommst du immer den normalisierten Wert in Kleinbuchstaben zurück. Ungültige Werte werden zu "get" normalisiert. Fehlt das Attribut, ist das Ergebnis ein leerer String. Dann gilt die Methode des Formulars.

Sinnvoll ist das, wenn ein Formular mehrere Aktionen anbietet, zum Beispiel „Vorschau“ per GET und „Speichern“ per POST, oder wenn ein Button in einem Dialog diesen schließen soll, statt Daten zu senden.

Parameter

Name Typ Default Beschreibung
$value string "" Beim Setzen: "get", "post" oder "dialog". Groß- und Kleinschreibung spielt keine Rolle. Das Setzen schreibt das Attribut formmethod.

Rückgabewert

Typ
string
Beschreibung
Die normalisierte Methode in Kleinbuchstaben ("get", "post", "dialog"). Bei fehlendem Attribut ein leerer String, bei ungültigem Wert "get".

Beispiele

Methode auslesen und normalisieren

// <form method="get"><button id="save" formmethod="POST">Speichern</button></form>
const btn = document.querySelector('#save');
console.log(btn.formMethod);

btn.setAttribute('formmethod', 'unsinn');
console.log(btn.formMethod);

btn.removeAttribute('formmethod');
console.log(JSON.stringify(btn.formMethod));
post get ""

Vorschau per GET, Speichern per POST

const form = document.createElement('form');
form.action = '/artikel';
form.method = 'get';

const preview = document.createElement('button');
preview.textContent = 'Vorschau';
preview.formMethod = 'get';
preview.formAction = '/artikel/vorschau';

const save = document.createElement('button');
save.textContent = 'Speichern';
save.formMethod = 'post';

form.append(preview, save);
document.body.append(form);

console.log(save.getAttribute('formmethod'));
post

Dialog über einen Button schließen

// <dialog id="dlg"><form><button id="ok" value="ok">OK</button></form></dialog>
const dlg = document.querySelector('#dlg');
const ok = document.querySelector('#ok');
ok.formMethod = 'dialog';

dlg.addEventListener('close', () => {
  console.log(`Dialog geschlossen mit: ${dlg.returnValue}`);
});

dlg.showModal();
// Ein Klick auf „OK“ schließt den Dialog ohne HTTP-Anfrage
Dialog geschlossen mit: ok

Tatsächlich verwendete Methode beim Absenden ermitteln

document.querySelector('form').addEventListener('submit', (event) => {
  const submitter = event.submitter;
  const method = submitter?.formMethod || event.target.method;
  console.log(`Übermittlung per ${method.toUpperCase()}`);
});
Übermittlung per POST

// Wichtig · Fallstricke

  • Nur für Absende-Buttons: Die Eigenschaft wirkt nur bei type="submit", dem Standardtyp. Bei type="button" oder type="reset" wird sie ignoriert.
  • Leerer String ≠ „get“: Fehlt das Attribut, liefert formMethod "". Die tatsächlich genutzte Methode steht dann in form.method. Frag deshalb mit btn.formMethod || form.method ab.
  • Nur GET und POST: HTML-Formulare kennen weder PUT noch DELETE oder PATCH. Solche Werte werden zu "get" normalisiert. Für andere Methoden brauchst du fetch().
  • form.submit() ignoriert den Button: Beim programmatischen form.submit() gilt formMethod nicht. Nutze stattdessen form.requestSubmit(button).
  • Sicherheit: Sensible Daten wie Passwörter nie per GET senden. Sie landen sonst in der URL, im Verlauf und in Server-Logs.
  • Kompatibilität: "get" und "post" werden seit Langem überall unterstützt. "dialog" funktioniert in allen aktuellen Browsern, die <dialog> unterstützen.