Start · Sprachen · JavaScript · Referenz · FormData.delete()

FormData.delete()

Methode

Entfernt einen Schlüssel samt <strong>allen</strong> zugehörigen Werten aus einem <code>FormData</code>-Objekt.

seit JavaScript Baseline: alle modernen Browser (seit 2017), Web W Kategorie: webapi

Signatur

FormData.prototype.delete(name)

Beschreibung

Die Methode delete() entfernt aus einem FormData-Objekt jeden Eintrag, dessen Name dem übergebenen Schlüssel entspricht. Wurden unter demselben Namen mit append() mehrere Werte abgelegt (z. B. bei Checkbox-Gruppen oder <input type="file" multiple>), werden alle diese Werte auf einmal gelöscht.

Typischer Einsatz: Ein Formular wird mit new FormData(form) eingelesen und vor dem Absenden per fetch() noch angepasst. Oft sollen dabei Felder entfernt werden, die nur im Browser gebraucht werden, etwa „Passwort wiederholen“, leere Datei-Felder oder interne Hilfsfelder.

Wenn der Schlüssel nicht vorhanden ist, passiert nichts. Es wird kein Fehler ausgelöst. Die Methode verändert das Objekt direkt und gibt undefined zurück, lässt sich also nicht verketten. Soll nur ein bestimmter Wert von mehreren entfernt werden, liest man mit getAll() alle Werte aus, löscht den Schlüssel mit delete() und fügt die gewünschten Werte per append() wieder hinzu.

Parameter

Name Typ Default Beschreibung
$name Pflicht string Name des Schlüssels, der samt allen seinen Werten entfernt werden soll. Groß- und Kleinschreibung wird unterschieden. Andere Werte als Strings werden in einen String umgewandelt.

Rückgabewert

Typ
void
Beschreibung
Gibt undefined zurück. Das FormData-Objekt wird direkt verändert.

Beispiele

Einfaches Entfernen eines Feldes

const fd = new FormData();
fd.append('benutzer', 'anna');
fd.append('passwort', 'geheim');

fd.delete('passwort');

console.log(fd.has('passwort'));
console.log([...fd.keys()]);
false ["benutzer"]

Mehrfachwerte werden komplett gelöscht

const fd = new FormData();
fd.append('tags', 'js');
fd.append('tags', 'css');
fd.append('tags', 'html');

console.log(fd.getAll('tags'));
fd.delete('tags');
console.log(fd.getAll('tags'));
["js", "css", "html"] []

Hilfsfelder vor dem Absenden per fetch entfernen

const form = document.querySelector('#registrierung');

form.addEventListener('submit', async (event) => {
  event.preventDefault();
  const fd = new FormData(form);

  // Nur im Browser benötigte Felder nicht mitschicken
  fd.delete('passwort_wiederholen');

  // Leeres Datei-Feld entfernen (Browser liefert sonst eine leere File)
  const avatar = fd.get('avatar');
  if (avatar instanceof File && avatar.size === 0) {
    fd.delete('avatar');
  }

  const res = await fetch('/api/registrieren', { method: 'POST', body: fd });
  console.log(res.status);
});
201

Nur einen einzelnen Wert aus einer Mehrfachauswahl entfernen

const fd = new FormData();
['rot', 'gruen', 'blau'].forEach((f) => fd.append('farbe', f));

const entferneWert = (formData, name, wert) => {
  const rest = formData.getAll(name).filter((v) => v !== wert);
  formData.delete(name);
  rest.forEach((v) => formData.append(name, v));
};

entferneWert(fd, 'farbe', 'gruen');
console.log(fd.getAll('farbe'));
["rot", "blau"]

// Wichtig · Fallstricke

  • Alle Werte weg: delete() entfernt immer sämtliche Einträge zu einem Namen. Es gibt keine Möglichkeit, gezielt einen einzelnen Index zu löschen. Dafür ist der Umweg über getAll() und append() nötig.
  • Kein Fehler bei fehlendem Schlüssel: Ob der Schlüssel existierte, sieht man nicht am Rückgabewert. Bei Bedarf vorher mit has() prüfen.
  • Nur das FormData-Objekt ändert sich: Das zugrunde liegende <form>-Element und seine Eingabefelder bleiben unverändert. Ein neues new FormData(form) enthält den Schlüssel wieder.
  • Reihenfolge: Nach delete() und erneutem append() stehen die Einträge am Ende der Liste. Die ursprüngliche Reihenfolge geht dabei verloren.
  • Kompatibilität: Ältere Browser (Internet Explorer, Safari vor 11) kennen nur Konstruktor und append(), aber kein delete(). In Node.js ist FormData ab Version 18 global verfügbar.