Signatur
Beschreibung
preventDefault() teilt dem Browser mit, dass Ihr Code das Ereignis selbst behandelt. Die Standardaktion des Browsers wird deshalb nicht ausgeführt. Beispiele dafür sind das Folgen eines Links, das Absenden eines Formulars mit Neuladen der Seite, das Umschalten einer Checkbox, das Öffnen des Kontextmenüs oder das Scrollen per Mausrad bzw. Touch.
Das Ereignis selbst läuft aber normal weiter. Es wird also weiterhin durch den DOM-Baum weitergereicht (Capturing und Bubbling), und andere Listener werden trotzdem aufgerufen. Wenn Sie die Weitergabe stoppen möchten, brauchen Sie stopPropagation() bzw. stopImmediatePropagation(). Ob die Standardaktion verhindert wurde, zeigt die Eigenschaft event.defaultPrevented.
Die Methode wirkt nur, wenn das Ereignis abbrechbar ist (event.cancelable === true). Bei nicht abbrechbaren Ereignissen wie scroll, load oder focus hat der Aufruf keine Wirkung. Typische Anwendungen sind Formularvalidierung mit Absenden per fetch(), Routing in Single-Page-Apps, eigene Tastenkürzel, Drag & Drop (dragover muss abgebrochen werden, damit drop ausgelöst wird) und eigene Kontextmenüs.
Rückgabewert
undefined). Ob der Aufruf gewirkt hat, zeigt danach event.defaultPrevented.Beispiele
Formular per fetch absenden statt neu zu laden
const form = document.querySelector('#kontakt');
form.addEventListener('submit', async (event) => {
event.preventDefault(); // kein Neuladen der Seite
const daten = new FormData(form);
const antwort = await fetch('/api/kontakt', {
method: 'POST',
body: daten
});
console.log(antwort.ok ? 'Gesendet' : 'Fehler beim Senden');
});
Links für clientseitiges Routing abfangen
document.addEventListener('click', (event) => {
const link = event.target.closest('a[data-route]');
if (!link) return;
// Strg/Cmd-Klick weiterhin in neuem Tab öffnen lassen
if (event.ctrlKey || event.metaKey || event.button !== 0) return;
event.preventDefault();
history.pushState({}, '', link.href);
console.log('Route gewechselt zu', location.pathname);
});
Eigenes Tastenkürzel Strg+S
const speichern = () => console.log('Entwurf gespeichert');
const onKeydown = (event) => {
if ((event.ctrlKey || event.metaKey) && event.key === 's') {
event.preventDefault(); // Dialog „Seite speichern“ unterdrücken
speichern();
}
};
document.addEventListener('keydown', onKeydown);
// Später wieder entfernen:
// document.removeEventListener('keydown', onKeydown);
Drag & Drop: dragover abbrechen und cancelable prüfen
const zone = document.querySelector('#dropzone');
zone.addEventListener('dragover', (event) => {
event.preventDefault(); // nötig, damit 'drop' ausgelöst wird
});
zone.addEventListener('drop', (event) => {
event.preventDefault(); // Browser soll die Datei nicht öffnen
console.log(event.cancelable, event.defaultPrevented);
const dateien = [...event.dataTransfer.files].map((f) => f.name);
console.log('Abgelegt:', dateien);
});
// Wichtig · Fallstricke
- Passive Listener: Wird ein Listener mit
{ passive: true }registriert, ignoriert der BrowserpreventDefault()und gibt eine Warnung in der Konsole aus. Chrome und Firefox behandelntouchstart,touchmoveundwheelaufwindow,documentundbodystandardmäßig als passiv. Wenn Sie das Scrollen blockieren wollen, müssen Sie ausdrücklich{ passive: false }angeben. - Nicht abbrechbare Ereignisse: Bei
event.cancelable === falsehat der Aufruf keine Wirkung. Das Scrollen lässt sich z. B. nicht über dasscroll-Ereignis verhindern, sondern nur überwheel,touchmoveoderkeydown. - Nicht mit stopPropagation verwechseln:
preventDefault()hält das Bubbling nicht an. Andere Listener laufen weiter. - Zeitpunkt: Der Aufruf muss synchron während der Ereignisbehandlung erfolgen. Nach einem
awaitoder in einemsetTimeoutist die Standardaktion bereits ausgeführt. return falseverhindert die Standardaktion nur inon…-Properties bzw. Inline-Handlern, nicht aber inaddEventListener. In jQuery bewirktreturn falsedagegen zusätzlichstopPropagation().- Barrierefreiheit: Unterdrücken Sie Standardverhalten wie Tab-Navigation oder Links nicht ohne gleichwertigen Ersatz. Ein vollständig verhindertes
keydownkann die Tastaturbedienung unbrauchbar machen. - Bei eigenen Ereignissen (
new CustomEvent(...)) musscancelable: truegesetzt sein.dispatchEvent()gibt dannfalsezurück, wenn ein ListenerpreventDefault()aufgerufen hat.