Klaus: wo ist der cursor?

Hallo
wie man den focus (den cursor) setzt ist klar:
 document.form.testfeld.focus();

Aber wie kann ich herausfinden welches Feld gerade den focus hat?

Klaus

  1. guckst Du hier!

  2. wie kann ich herausfinden welches Feld gerade den focus hat?

    http://molily.de/weblog/javascript-fokus-zentral

    Mathias

  3. Lieber Klaus,

    Aber wie kann ich herausfinden welches Feld gerade den focus hat?

    meines Wissens gibt es keine allgemein unterstützte JavaScript-Eigenschaft (z.B. document.focussedNode oder ähnliches), die Du in allen Browsern abfragen könntest. Daher müsste man sich soetwas selbst bauen (wenn man keine Bibliothek verwendet, die das bereits mitbringt).

    Idee: Definiere Dir eine neue Eigenschaft für Dein document-Objekt. Wenn Du diese Eigenschaft nicht explizit anlegst, musst Du eventuell immer erst prüfen, ob sie überhaupt existiert.
    document.focussedNode = null;

    Jedes Deiner Formular-Elemente belegst Du mit einem onfocus-Event, welches nichts anderes tut, als sich selbst (also eine Referenz auf das gerade fokussierte Element) in obige document-Eigenschaft einzutragen, und ein onblur-Event, welches dafür sorgt, dass das Element wieder ausgetragen wird.

    function initialisiereFormularElemente (formular) {  
        var i;  
      
        for (i = 0; i < formular.elements.length; i++) {  
            // onfocus-Event  
            formular.elements[i].onfocus = function () {  
                // "this" enthält eine Referenz auf das Element, welches das Event auslöst:  
                document.focussedNode = this;  
            };  
      
            // onblur-Event  
            formular.elements[i].onblur = function () {  
                if ( // Eigenschaft überhaupt definiert?  
                    document.focussedNode  
                    // Steht das Element noch in document.focussedNode?  
                    && document.focussedNode == this  
                ) {  
                    // ja -> entfernen  
                    document.focussedNode = null;  
                }  
            };  
        }  
    }
    

    Obige Funktion kannst Du erst dann ausführen lassen, wenn das Dokument vollständig geladen wurde, da Du sonst nicht alle Elemente erreichst, oder gar das Formular zum Zeitpunkt des Funktionsaufrufs noch nicht existiert. Näheres dazu hier: Autostart eines JavaScripts.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. meines Wissens gibt es keine allgemein unterstützte JavaScript-Eigenschaft (z.B. document.focussedNode oder ähnliches)

      Nun, die gibt es: document.activeElement. Wird allerdings noch nicht von allen Browsern unterstützt, es ist jedoch einfach, sie bei fehlender Unterstützung nachzubauen.

      Jedes Deiner Formular-Elemente belegst Du mit einem onfocus-Event

      Genau für solche Anwendungsgebiete gibt es Event Capturing bzw. Event Delegation mit bubblenden (DOM)focusin-Events, was die Sache viel, viel einfacher macht.

      Mathias