Signatur
Beschreibung
window.event ist eine veraltete globale Eigenschaft aus der Zeit des Internet Explorer. Solange ein Event-Handler läuft, verweist sie auf das Event-Objekt, das der Browser gerade verteilt. Außerhalb eines Event-Handlers ist der Wert undefined.
Früher war sie im IE die einzige Möglichkeit, an das Event-Objekt zu kommen, weil Handler kein Argument bekamen. Heute übergibt jeder Browser das Event als ersten Parameter an den Listener. Deshalb sollte man window.event in neuem Code nicht verwenden.
Nützlich ist die Eigenschaft höchstens beim Pflegen von Altcode, etwa bei Inline-Handlern wie onclick="handle()", die das Event nicht weiterreichen, oder beim Debuggen. Wichtig: Der Wert kann auf ein anderes Event zeigen als erwartet, zum Beispiel bei verschachtelt ausgelösten Events. Und in Handlern aus einem Shadow-DOM-Baum ist er undefined.
Rückgabewert
Event-Objekt oder undefined, wenn kein Event-Handler läuft oder der Handler zu einem Shadow-Baum gehört.Beispiele
Vergleich mit dem Event-Parameter des Listeners
const button = document.createElement('button');
button.textContent = 'Klick mich';
document.body.append(button);
button.addEventListener('click', (e) => {
// Beide verweisen auf dasselbe Objekt
console.log(window.event === e);
console.log(window.event.type);
});
button.click();
Außerhalb eines Handlers ist der Wert undefined
console.log(window.event);
setTimeout(() => {
// Ein Timer ist kein Event-Handler
console.log(window.event);
}, 0);
Altcode: Inline-Handler ohne Event-Argument
// HTML: <a href="/info" onclick="legacyHandler()">Info</a>
function legacyHandler() {
const ev = window.event; // nur für Altcode!
ev.preventDefault();
console.log('Navigation verhindert:', ev.target.getAttribute('href'));
}
// Besser: das Event ausdrücklich übergeben
// <a href="/info" onclick="modernHandler(event)">Info</a>
const modernHandler = (event) => {
event.preventDefault();
console.log('Navigation verhindert:', event.target.getAttribute('href'));
};
// Wichtig · Fallstricke
- Veraltet: Nimm immer den Event-Parameter des Listeners (
addEventListener('click', (e) => …)). In Inline-Handlern steht er alseventzur Verfügung. - Firefox unterstützt
window.eventerst seit Version 66. Davor war der Wert dortundefined, und Code, der sich darauf verließ, brach ab. - In Handlern, deren Ziel in einem Shadow-DOM liegt, ist der Wert
undefined. So bleibt die Kapselung des Shadow-DOM gewahrt. - Der Wert gilt nur, solange der Handler synchron läuft. Nach einem
await, insetTimeoutoder in Promise-Callbacks ist erundefinedoder zeigt auf ein anderes Event. - Werden Events verschachtelt ausgelöst (etwa per
dispatchEventinnerhalb eines Handlers), zeigtwindow.eventauf das innerste Event, das gerade läuft. - Wenn eine lokale Variable oder ein Parameter
eventheißt, verdeckt sie die globale Eigenschaft. Das führt schnell zu Verwechslungen.