Signatur
Beschreibung
HTMLFormElement.encoding ist ein alternativer Name für HTMLFormElement.enctype. Beide Eigenschaften spiegeln das HTML-Attribut enctype des <form>-Elements wider. Sie legen fest, wie die Formulardaten beim Absenden mit method="post" codiert werden.
Gültige Werte sind:
application/x-www-form-urlencoded– Standardwert, Schlüssel-Wert-Paare URL-codiertmultipart/form-data– nötig für Datei-Uploads über<input type="file">text/plain– unverschlüsselter Klartext (nur zum Debuggen sinnvoll)
Ungültige oder fehlende Werte werden beim Lesen auf application/x-www-form-urlencoded normalisiert. Wenn du einen Wert schreibst, änderst du das Attribut enctype direkt. Das Lesen über form.getAttribute('enctype') liefert deshalb danach den neuen Wert.
Die Eigenschaft gibt es vor allem aus Gründen der Abwärtskompatibilität. In neuem Code solltest du enctype verwenden, weil der Name dort mit dem HTML-Attribut übereinstimmt.
Rückgabewert
application/x-www-form-urlencoded, multipart/form-data oder text/plain. Die Eigenschaft ist beschreibbar.Beispiele
Codierung auslesen und mit enctype vergleichen
const form = document.createElement('form');
console.log(form.encoding);
form.setAttribute('enctype', 'multipart/form-data');
console.log(form.encoding);
console.log(form.encoding === form.enctype);
Beim Hinzufügen eines Datei-Uploads auf multipart umschalten
const form = document.querySelector('#profil-form');
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.name = 'avatar';
form.append(fileInput);
// Ohne multipart würde nur der Dateiname übertragen
if (form.encoding !== 'multipart/form-data') {
form.encoding = 'multipart/form-data';
}
console.log(form.getAttribute('enctype'));
Normalisierung ungültiger Werte
const form = document.createElement('form');
form.encoding = 'application/json';
console.log(form.getAttribute('enctype'));
console.log(form.encoding);
// Wichtig · Fallstricke
- Alias:
encodingundenctypeverhalten sich identisch. Bevorzugeenctype, da der Name dem HTML-Attribut entspricht. - Überschreibung durch Buttons: Ein Absende-Button mit dem Attribut
formenctypeüberschreibt den Wert des Formulars.form.encodingzeigt diese Überschreibung nicht an. - Nur bei POST relevant: Bei
method="get"werden die Daten immer URL-codiert an die Adresse angehängt, egal welcher Wert gesetzt ist. - Kein JSON:
application/jsonist kein gültiger Wert. Für JSON-Übertragung verwendefetch()mitJSON.stringify(). - fetch mit FormData: Bei
fetch(url, { body: new FormData(form) })wird die Eigenschaft ignoriert. Es wird immermultipart/form-datagesendet. - Browser-Kompatibilität: Wird von allen gängigen Browsern seit Langem unterstützt.