Webseiten reagieren auf Ereignisse: Klicks, Tastendrücke, Formulare, Mausbewegungen. Mit addEventListener legst du fest, welche Funktion dann laufen soll.
Ergebnis
Häufige Ereignisse
| Ereignis | Wann |
|---|---|
click, dblclick | Klick, Doppelklick |
input | Wert eines Felds ändert sich (bei jedem Tastendruck) |
change | Wert wurde bestätigt |
submit | Formular wird abgeschickt |
keydown, keyup | Taste gedrückt/losgelassen |
mouseover, mouseout, mousemove | Maus |
pointerdown, pointerup, pointermove | Maus, Touch und Stift einheitlich |
focus, blur | Fokus erhalten/verloren |
scroll, resize | Scrollen, Fenstergröße |
DOMContentLoaded, load | Seite geladen |
Das Event-Objekt
Die Funktion bekommt ein Objekt mit Details zum Ereignis:
Ergebnis
| Eigenschaft | Bedeutung |
|---|---|
e.target | Element, an dem das Ereignis entstand |
e.currentTarget | Element, an dem der Listener hängt |
e.key, e.code | gedrückte Taste |
e.clientX, e.clientY | Mausposition im Fenster |
e.preventDefault() | Standardverhalten verhindern |
e.stopPropagation() | Weitergabe nach oben stoppen |
Standardverhalten verhindern
Ergebnis
Bubbling und Delegation
Ereignisse steigen auf: Ein Klick auf ein <li> löst die Listener am <li>, dann am <ul>, am <body> usw. aus (Bubbling). Das nutzt man für Event Delegation: Ein einziger Listener am Elternelement bedient viele (auch später hinzugefügte) Kinder:
Ergebnis
Neue Einträge funktionieren sofort, ohne dass du einen weiteren Listener anmeldest.
Listener entfernen und Optionen
function einmal(e) { console.log("nur einmal", e.type); }
btn.addEventListener("click", einmal);
btn.removeEventListener("click", einmal); // dieselbe Funktion nötig
btn.addEventListener("click", () => {}, { once: true }); // nach dem ersten Mal automatisch entfernt
window.addEventListener("scroll", () => {}, { passive: true }); // verspricht, nicht preventDefault zu rufen
const abbruch = new AbortController();
btn.addEventListener("click", () => {}, { signal: abbruch.signal });
abbruch.abort(); // entfernt alle Listener dieses SignalsVerwende addEventListener statt onclick="..." im HTML. So bleiben HTML und JavaScript getrennt, und du kannst mehrere Listener anmelden.
Tastatur-Bedienung
Baue Funktionen so, dass sie auch per Tastatur gehen: Nutze <button> statt <div> mit Klick-Listener (Buttons sind fokussierbar und reagieren auf Enter/Leertaste), und prüfe bei eigenen Tastenkürzeln e.key.
document.addEventListener("keydown", (e) => {
if (e.key === "Escape") schliesseDialog();
if (e.ctrlKey && e.key.toLowerCase() === "k") { e.preventDefault(); oeffneSuche(); }
});Eigene Ereignisse
Ergebnis
Detail: { id: 1 }Merke
addEventListener("click", funktion)meldet eine Reaktion an- Das Event-Objekt liefert
target,key, Position usw. preventDefault()verhindert das Standardverhalten (Link, Formular)- Ereignisse steigen auf: Event Delegation spart Listener
- Nutze Buttons und Formularelemente, damit alles per Tastatur geht
Aufgabe
Baue eine Liste mit Event Delegation: Ein Klick auf einen Eintrag hakt ihn ab; ein Eingabefeld mit Button fügt neue Einträge hinzu.