Hallo
wie kann ich es lösen, das ich per event erkennen kann ob die "select-box" gerade beim auswählen ist. d.h. ich möchte erkennen ob die Auswahlbox geöffnet ist und ein event das die Auswahl abgeschlossen ist.
Das Ereignis focus
wird ausgelöst, wenn das select
angewählt ist …
// wenn die Seite fertig geparst ist und alle Elemente als Objekt zur Verfügung stehen ...
window.addEventListener('DOMContentLoaded', function ( ) {
// registriere für das Body-Element und das Ereignis focus einen Event-Listener
document.body.addEventListener('focus', function (event) {
// speichere das Element, das den Fokus bekommen hat in der Variable target
var target = event.target;
// und wenn es sich dabei um ein select-Element handelt ...
if (target.tagName == 'SELECT') {
// mache irgendwas damit
}
// die Angabe true für die Capturing-Phase nicht vergessen,
// da focus nicht im DOM aufsteigt
}, true);
});
Bedenke, dass es nicht notwendig ist, für jedes Element einen Eventhandler zu registrieren, da die Ereignisse innerhalb der Baumstruktur des DOM propagieren. Das Ereignis focus
kann jedoch nur auf seinem Weg von den Vorfahrenelementen hin zum Zielelement, oder auf dem Zielelement selbst abgefangen werden, also nur in der Capturing-Phase und der Target-Phase des Ereignisses.
Darum folgt hier hinter der Handlerfunktion die Notierung von true
. Diese sorgt dafür, dass die Handlerfunktion aufgerufen wird, obwohl sie nicht für die potentiellen Zielelemente selbst, sondern für deren Vorfahrenelement body
registriert wurde. Innerhalb der Funktion kannst du dann wie im obigen Beispiel über bedingte Anweisungen entsprechend selektieren.
Wenn du wissen willst, ob eine Auswahl getroffen wurde, beziehungsweise ob die bisherige Auswahl verändert wurde, dann bietet sich die Überwachung des Ereignisses change
an:
// registriere einen globalen Eventhandler für das Ereignis change
document.body.addEventListener('change', function (event) {
// hinterlege das Element, bei welchem das Ereignis ausgelöst wurde,
// in der Variable mit dem Bezeichner target ...
var target = event.target;
// und wenn es sich dabei um ein select-Element handelt ...
if (target.tagName == 'SELECT') {
// speichere die aktuelle Auswahl in der Variable selected
var selected = target.value;
// ... und mach irgendwas damit
console.info(selected);
}
});
Hier ist nun keine Angabe zur Ereignisphase bei der Argumentübergabe nötig, da das Ereignis change
im Gegensatz zu focus
, nachdem es das Zielelement passiert hat, die Kette seiner Vorfahrenelemente entlang wieder in Richtung globales Objekt (window) propagiert und es auf dem Weg dahin von dem für body
registrierten Handler abgefangen werden kann.
Viele Grüße,
Orlok