Signatur
Beschreibung
Die Eigenschaft formEnctype spiegelt das HTML-Attribut formenctype eines <button>-Elements wider. Sie legt fest, wie die Formulardaten kodiert werden, wenn das Formular über genau diesen Absende-Button abgeschickt wird, und überschreibt dabei das enctype-Attribut des zugehörigen <form>-Elements.
Gültige Werte sind:
application/x-www-form-urlencoded– Standardwert, Schlüssel-Wert-Paare URL-kodiert.multipart/form-data– notwendig für Datei-Uploads über<input type="file">.text/plain– unkodierter Klartext, hauptsächlich zum Debuggen.
Typischer Einsatz: Ein Formular besitzt mehrere Absende-Buttons, z. B. „Nur Text speichern“ und „Mit Anhang hochladen“. Der zweite Button kann per formEnctype auf multipart/form-data umschalten, ohne das Formular selbst zu ändern. Die Eigenschaft wirkt nur bei Buttons mit type="submit" (Standard) und nur bei method="post".
Beim Lesen liefert der Getter einen normalisierten Wert: Ist das Attribut ungültig, erhält man application/x-www-form-urlencoded; fehlt es ganz, ist das Ergebnis je nach Browser ein leerer String bzw. der Standardwert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | "application/x-www-form-urlencoded" | Beim Setzen: einer der Werte application/x-www-form-urlencoded, multipart/form-data oder text/plain. Wird als Attribut formenctype geschrieben. |
Rückgabewert
application/x-www-form-urlencoded normalisiert.Beispiele
Wert auslesen
// HTML: <form method="post" action="/upload"><button id="upload" formenctype="multipart/form-data">Hochladen</button></form>
const btn = document.querySelector('#upload');
console.log(btn.formEnctype);
Kodierung abhängig von Dateiauswahl umschalten
const form = document.querySelector('#nachricht');
const fileInput = form.querySelector('input[type="file"]');
const sendBtn = form.querySelector('button[type="submit"]');
fileInput.addEventListener('change', () => {
// Nur bei ausgewählter Datei multipart verwenden
sendBtn.formEnctype = fileInput.files.length > 0
? 'multipart/form-data'
: 'application/x-www-form-urlencoded';
console.log('Kodierung:', sendBtn.formEnctype);
});
Ungültige Werte werden normalisiert
const btn = document.createElement('button');
btn.formEnctype = 'application/json';
console.log(btn.getAttribute('formenctype'));
console.log(btn.formEnctype);
Im submit-Event den verwendeten Button prüfen
document.querySelector('form').addEventListener('submit', (event) => {
const submitter = event.submitter;
const enctype = submitter?.formEnctype || event.target.enctype;
console.log('Gesendet mit:', enctype);
});
// Wichtig · Fallstricke
- Nur bei POST wirksam: Bei
method="get"werden die Daten immer als URL-Query angehängt;formEnctypewird ignoriert. - Kein JSON:
application/jsonist kein gültiger Wert. Für JSON-Übertragungfetch()mitJSON.stringify()verwenden. - Nur für Submit-Buttons: Bei
type="button"odertype="reset"hat die Eigenschaft keine Wirkung. - Datei-Uploads: Ohne
multipart/form-datawird bei Dateifeldern nur der Dateiname gesendet, nicht der Inhalt. - Wenn du Formulare per
fetch(url, { body: new FormData(form) })sendest, wirdformEnctypenicht beachtet;FormDatawird immer alsmultipart/form-dataübertragen. - Kompatibilität: In allen modernen Browsern unterstützt;
event.submittergibt es erst seit Safari 15.4.