Start · Sprachen · JavaScript · Referenz · HTMLInputElement.accept

HTMLInputElement.accept

Eigenschaft

Liest oder setzt das <code>accept</code>-Attribut eines <code>&lt;input type="file"&gt;</code>. Es legt fest, welche Dateitypen der Auswahldialog vorschlägt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLInputElement.accept

Beschreibung

Die Eigenschaft accept spiegelt das HTML-Attribut accept eines <input>-Elements wider. Wirkung hat sie nur bei type="file". Der Wert ist eine kommagetrennte Liste von Dateityp-Angaben. Damit weiß der Browser, welche Dateien er im Auswahldialog vorfiltern oder anbieten soll.

Erlaubt sind drei Arten von Angaben:

  • Dateiendungen mit führendem Punkt, z. B. .pdf oder .docx
  • MIME-Typen, z. B. image/png oder application/pdf
  • Platzhalter: image/*, audio/* und video/*

Die Eigenschaft ist lesbar und schreibbar. Setzt man sie per JavaScript, ändert sich sofort auch das Attribut im DOM, und der nächste Dateidialog berücksichtigt den neuen Wert. Fehlt das Attribut, liefert die Eigenschaft einen leeren String "".

Wichtig: accept ist nur ein Hinweis für die Benutzeroberfläche und keine Prüfung. Nutzer können im Dialog meist auf „Alle Dateien“ umschalten oder Dateien per Drag & Drop ablegen. Deshalb muss der Dateityp zusätzlich im Client und vor allem auf dem Server geprüft werden.

Parameter

Name Typ Default Beschreibung
$value string "" Beim Setzen: kommagetrennte Liste aus Dateiendungen (.jpg), MIME-Typen (image/jpeg) oder Platzhaltern (image/*).

Rückgabewert

Typ
string
Beschreibung
Der aktuelle Wert des accept-Attributs. Ist das Attribut nicht gesetzt, ein leerer String.

Beispiele

Wert auslesen

// HTML: <input type="file" id="avatar" accept="image/png, image/jpeg">
const input = document.querySelector('#avatar');
console.log(input.accept);
image/png, image/jpeg

Dateityp je nach Upload-Art dynamisch setzen

const upload = document.querySelector('#upload');
const typeSelect = document.querySelector('#upload-type');

const acceptMap = {
  bild: 'image/*',
  dokument: '.pdf,.doc,.docx,application/pdf',
  video: 'video/mp4,video/webm'
};

typeSelect.addEventListener('change', () => {
  upload.accept = acceptMap[typeSelect.value] ?? '';
  upload.value = ''; // bisherige Auswahl verwerfen
  console.log('accept =', upload.accept);
});
accept = image/*

Ausgewählte Dateien zusätzlich gegen accept prüfen

const input = document.querySelector('input[type=file]');

const matchesAccept = (file, accept) => {
  if (!accept) return true;
  return accept.split(',').map(t => t.trim().toLowerCase()).some(rule => {
    if (rule.startsWith('.')) return file.name.toLowerCase().endsWith(rule);
    if (rule.endsWith('/*')) return file.type.startsWith(rule.slice(0, -1));
    return file.type === rule;
  });
};

input.addEventListener('change', () => {
  const invalid = [...input.files].filter(f => !matchesAccept(f, input.accept));
  if (invalid.length) {
    alert(`Nicht erlaubt: ${invalid.map(f => f.name).join(', ')}`);
    input.value = '';
  }
});

Kamera auf Mobilgeräten vorschlagen

const photo = document.createElement('input');
photo.type = 'file';
photo.accept = 'image/*';
photo.capture = 'environment'; // Rückkamera (nur mobil)
document.body.append(photo);
console.log(photo.outerHTML);
<input type="file" accept="image/*" capture="environment">

// Wichtig · Fallstricke

  • Keine Sicherheitsprüfung: accept filtert nur den Dateidialog vor. Nutzer können den Filter umgehen, etwa per „Alle Dateien“, Drag & Drop oder mit den Entwicklertools. Dateityp und Inhalt deshalb immer serverseitig prüfen. File.type leitet der Browser nur aus der Dateiendung ab und ist daher nicht vertrauenswürdig.
  • Bei anderen Typen als type="file" bleibt die Eigenschaft wirkungslos, wird aber trotzdem gespiegelt.
  • MIME-Typen und Dateiendungen am besten kombinieren, z. B. .csv,text/csv. Betriebssysteme ordnen Endungen unterschiedlich zu, und manche Typen (CSV, DOCX) erkennen sie nicht überall.
  • Wie der Dialog den Filter umsetzt, hängt vom Browser ab: Mobile Browser bieten bei image/* oft Kamera und Galerie an, Desktop-Browser zeigen eher einen Dateifilter.
  • Eine Änderung von accept entfernt keine Dateien, die bereits ausgewählt wurden. Bei Bedarf input.value = '' setzen.
  • Browser-Kompatibilität: wird seit Langem von allen modernen Browsern unterstützt.