molily: focus bestimmen

Beitrag lesen

eine einfache Frage: Wie kann ich in Javascript feststellen, welches Element den Focus hat?

Hoffentlich ist die Antwort auch so einfach...

Es geht zumindest etwas eleganter als die von Cheatah vorgestellte Methode.

Es gibt die Eigenschaft document.activeElement, die das Element enthält, das gerade den Fokus hat (sofern es fokussierbar ist). Die Eigenschaft hat ursprünglich Microsoft erfunden, wird aber auch von anderen Browsern unterstützt und wird in HTML 5 standardisiert werden.

Alternativ kann man focus-Ereignisse durch Event-Capturing verarbeiten:

function fokusHandler (e) {  
   alert(e.target + " wurde fokussiert");  
}  
document.addEventListener("focus", fokusHandler, true);

Funktioniert aber nur in Nicht-IE-Browsern.

Schließlich kann man aufsteigende Ereignisse verarbeiten. Focus-Ereignisse haben kein Bubbling, aber es gibt zusätzliche Ereignisse, die bei einem Fokus passieren und die aufsteigen. Als da wären activate/focusin (IE) und DOMFocusIn (Opera, Safari).
http://www.quirksmode.org/dom/events/blurfocus.html#link1

function fokusHandler (e) {  
   if (!e) e = window.event;  
   var target = e.target || e.srcElement;  
   alert(target.nodeName + " wurde fokussiert");  
}  
document.onactivate = fokusHandler;  
if (document.addEventListener) {  
 document.addEventListener("DOMFocusIn", fokusHandler, false);  
}

Nachteil: Funktioniert nur im Safari, IE und Opera, nicht im Firefox.

Alternativ zu activeElement könnte man onactivate und focus-Capturing kombinieren, um alle Browser zu erreichen. Man muss natürlich die Fokussierung des body-Elements herausfiltern, die interessiert ja nicht.

Denkbar wäre auch, mit den besagten Methoden ein document.activeElement für die Browser nachzubauen, die activeElement noch nicht kennen (wüsste aber gerade nicht, welche).

Mathias