Luma: focus bestimmen

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Habe ich mir beinahe gedacht, aber trotzdem gehofft, es gäbe da was einfacheres.

      Trotzdem vielen Dank.

      Luma

  2. 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

    1. 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

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. 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

        1. 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

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
  3. 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

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. 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

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. 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

        --
        Wo die Sprache aufhört, fängt die Musik an...
        Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
        Go to this
        1. 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

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes