Hallo,
ist es möglich bei der Anweisung 'onblur' mehrere Elemente auszunehmen?
Hintergrund:
ich habe ein Menü dass sich bei click auf einen Button öffnet. Wenn der User nun nicht in das Menü klickt soll sich das Menü wieder schließen. Das Ganze ist mit einer Liste (<ul><li> usw..) realisiert.
Den Event blur gibt es nur bei Elementen, die fokussiert werden können, das sind v.a. Formular-Eingabefelder und Links. Dein Menü ist beim Aufklappen nicht fokussiert (höchstens Links darin, wenn sie mit der Tastatur angesprungen wurden), also passiert dort auch kein blur-Event, wenn der Anwender irgendwo ins Dokument klickt.
Du willst wahrscheinlich eher diesen Klick, der nicht das Menü trifft, behandeln. Also setzt du einen dokumentweiten click-Handler: document.onclick = handler;. Der verarbeitet dann alle click-Events im Dokument, denn click-Events steigen auf (»Bubbling«). Konkret schließt dieser Handler das Menü, falls es aufgeklappt ist.
In der Handler-Funktion müsstest du dann eben abfragen, ob der Klick nicht das Menü getroffen hat. Da könnte man über das Ziel-Element (target bzw. srcElement) gehen, also das Element, welches tatsächlich geklickt wurde und von dem der Event dann aufgestiegen ist.
Einfacher geht es, wenn du dem Menü einen click-Handler verpasst, der das Aufsteigen von click-Ereignissen verhindert. Dadurch kommen beim click-Handler beim darüberliegenden document-Objekt nur diejenigen click-Events an, die nicht von Elementen im Menü ausgingen.
Das ginge etwa so (angenommen, das Menü-Container-Element hat id="menu"):
document.getElementById("menu").onclick = menuclick;
function menuclick (e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble = false;
}
}
Mathias