focus bestimmen
Luma
- javascript
0 Cheatah0 Luma
2 molily
0 minicrispie0 Cheatah0 minicrispie2 Cheatah
Hallo zusammen
eine einfache Frage: Wie kann ich in Javascript feststellen, welches Element den Focus hat?
Hoffentlich ist die Antwort auch so einfach...
Danke für die Hilfe.
Luma
Hi,
eine einfache Frage: Wie kann ich in Javascript feststellen, welches Element den Focus hat?
indem man bei jedem in Frage kommenden Element das onfocus- und das onblur-Event verwendet, um den Vorgang der (De-)Fokussierung zur Beantwortung dieser Frage zu nutzen.
Hoffentlich ist die Antwort auch so einfach...
Die Antwort ja, die Umsetzung weniger.
Cheatah
Habe ich mir beinahe gedacht, aber trotzdem gehofft, es gäbe da was einfacheres.
Trotzdem vielen Dank.
Luma
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
Hi,
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).
mindestens Seamonkey.
Cheatah
mindestens Seamonkey.
Gecko kann es anscheinend ab Version 1.9, also Firefox 3. Seamonkey 1.1.x basiert noch wie Firefox 2 auf Gecko 1.8.1.
Mathias
Hi,
Gecko kann es anscheinend ab Version 1.9, also Firefox 3. Seamonkey 1.1.x basiert noch wie Firefox 2 auf Gecko 1.8.1.
jepp. Knapp, kann man also sagen ;-)
Cheatah
Hallo,
Hoffentlich ist die Antwort auch so einfach...
klar ... jedes mal, wenn ein Element den Fokus erhält, rufst du eine Funktion, die die ID des Elements speichert. Somit weist du immer, welches Element des FDokus besitzt ...
MfG. Christoph Ludwig
Hi,
klar ... jedes mal, wenn ein Element den Fokus erhält, rufst du eine Funktion, die die ID des Elements speichert.
und der Umweg über eine (eventuell nicht mal vorhandene) ID ist sinnvoll, weil ...?
Cheatah
Hallo,
und der Umweg über eine (eventuell nicht mal vorhandene) ID ist sinnvoll, weil ...?
weil gar nichts.
wenn es nicht zehntausnde von elementen gibt, dann kann man doch jedem element eine id vergeben und nutzen ...
und wenn man die id's vergeben hat kann man sie vielleicht später auch mit anderen skripten verwenden ...
MfG. Christoph Ludwig
Hi,
wenn es nicht zehntausnde von elementen gibt, dann kann man doch jedem element eine id vergeben und nutzen ...
welchen Grund sollte es dafür geben? Welchen Grund gibt es dafür, eine ID zu speichern, aus der dann später erst noch das Element ermittelt werden muss, obwohl das Element direkt hätte gespeichert werden können? Wenn Du Dir eine Telefonnummer notieren willst, was schreibst Du dann auf: die Nummer oder die Seite/Spalte/Zeile im Telefonbuch?
und wenn man die id's vergeben hat kann man sie vielleicht später auch mit anderen skripten verwenden ...
Wenn ein Element bemerkenswert eindeutig ist - was eine Voraussetzung für derlei Aktionen ist - dann hat es bereits eine ID. Ist es das nicht, existiert kein Grund, eine hinzuzufügen, nur weil man aus dem Element heraus eine Aktion starten will.
Cheatah