Junior
Was ist das Ereignismodell im Browser?
sobes.tech KI
Antwort von AI
Methode zur Handhabung von Benutzerinteraktionen (Klicks, Eingaben, Hover) und Systemereignissen (Seitenladen, Fehler) im Webbrowser.
Hauptkonzepte:
- Ereignis: Aktion, die stattgefunden hat.
- Ereignis-Handler: Funktion, die beim Eintreten des Ereignisses ausgeführt wird.
- Ereignisobjekt (Event object): Wird an den Handler übergeben und enthält Informationen über das Ereignis (Typ, Element, Koordinaten usw.).
Standardfluss der Ereignisse:
- Capturing (Fangphase): Das Ereignis wandert vom obersten DOM-Element (Window, Document) zum Ziel-Element. Handler in dieser Phase werden zuerst ausgelöst.
- Zielphase (Target phase): Das Ereignis erreicht das Ziel-Element, auf dem es passiert ist.
- Bubbling (Blasphase): Das Ereignis steigt vom Ziel-Element durch den DOM-Baum bis zum Window auf. Handler in dieser Phase werden nach den Phasen Capture und Target ausgelöst.
Hinzufügen von Handlern:
- HTML-Attribute (
onclick,onload): Veraltete Methode, nicht für komplexe Anwendungen empfohlen. - DOM-Elementeigenschaften (
element.onclick): Es kann nur ein Handler pro Ereignistyp pro Element zugewiesen werden.// Beispiel const button = document.querySelector('button'); button.onclick = function() { alert('Button wurde gedrückt!'); }; - Methode
addEventListener: Bevorzugte Methode. Ermöglicht das Hinzufügen mehrerer Handler für ein Ereignis und die Steuerung der Phase (Capture oder Bubbling).// Beispiel const button = document.querySelector('button'); button.addEventListener('click', function(event) { console.log('Klick auf den Button!', event); }, false); // false - Bubbling, true - Capture
Die Methode removeEventListener wird zum Entfernen von Handlern verwendet.
Event-Delegation: Anfügen eines Handlers an ein Elternelement, um Ereignisse von Kind-Elementen zu behandeln. Spart Ressourcen und vereinfacht die Arbeit mit dynamischem Inhalt.
// Beispiel für Delegation
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('Klick auf Listenelement:', event.target.textContent);
}
});