Mehmet Sariyar: Ermitteln des letzten fokusierten Elements

Hi Friends!

Hat jmd vielleicht schon mal mit jScript ermittelt, welches Element in einer Form zuletzt den focus gehabt hat? Ich schicke diese Info nämlich per hidden-field an den Server. Mit [element].focus() wird der focus auf dieses Element gesetzt, soweit so gut. Wie geht es nun umgekehrt, wenn ich wissen will, WAS fokussiert wurde? Thx.4.@ll.Help.

  1. abend,

    Hat jmd vielleicht schon mal mit jScript ermittelt, welches Element
    in einer Form zuletzt den focus gehabt hat? Ich schicke diese Info
    nämlich per hidden-field an den Server.

    wenn du es eh bereits im hiddenfield an den server schickst ist doch alles klar.

    mfg,
    (tanz das)
    Z.N.S.

    --

    .:LIFE ON OTHER PLANETS IS DIFFICULT:.
    1. Ob es Sinn macht, oder andere Wege gibt ?

      Setz zu jeden element ein onFocus Event

      onFocus="trigger(this)"  und packs in eine Array nimm von dort den letzten Eintrag, oder packs direkt in Dein Hidden-Field.

      Berdn

    2. abend,
      ...nämlich per hidden-field an den Server.
      wenn du es eh bereits im hiddenfield an den server schickst ist doch alles klar.
      ...

      Ich kenne es aber a priori nicht, welches Element den Focus hat.
      D.h. ich muss es ermitteln, damit ich es versenden kann ;-)

      1. abend,

        abend,
        ...nämlich per hidden-field an den Server.

        <ironie>

        wenn du es eh bereits im hiddenfield an den server schickst ist doch alles klar.

        </ironie>

        ...
        Ich kenne es aber a priori nicht, welches Element den Focus hat.
        D.h. ich muss es ermitteln, damit ich es versenden kann ;-)

        hätte vielleicht die ironie-tags nicht auslassen sollen.. ;-)
        mfg,
        (tanz das)
        Z.N.S.

        --

        .:LIFE ON OTHER PLANETS IS DIFFICULT:.
  2. Hallo,

    Hat jmd vielleicht schon mal mit jScript ermittelt, welches Element in einer Form zuletzt den focus gehabt hat?

    Verwende DOM-konform addEventListener() und fuer den IE attachEvent(), hier mal fuer ein Formular demonstriert:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test by TM 10/04</title>
    <script language="JavaScript" type="text/javascript">
    <!--

    var dom=false,ie=false;

    function Init()
    {
      var f=document.getElementById("formular");
      if(f.addEventListener)
      {
        dom=true;
        f.addEventListener("focus",CheckFocus,true);
      }
      else if(f.attachEvent)
      {
        ie=true;
        for(i=0;i<f.childNodes.length;i++)if(f.childNodes.item(i).nodeName.toLowerCase()=="input")f.childNodes.item(i).attachEvent("onfocus",CheckFocus);
      }
    }

    function CheckFocus(event)
    {
      if(dom)alert("Ereignis kam von Element\n"+event.target.nodeName.toLowerCase()+" mit name=""+event.target.name+"".");
      else if(ie)alert("Ereignis kam von Element\n"+event.srcElement.nodeName.toLowerCase()+" mit name=""+event.srcElement.name+"".");
    }

    //-->
    </script>
    </head>
    <body onload="Init()">
    <form id="formular" action="">
    <input type="text" name="a">
    <input type="text" name="b">
    <input type="text" name="c">
    <input type="text" name="d">
    <input type="text" name="e">
    </form>
    </body>
    </html>

    Der IE kennt auch noch activeElement(): http://www.styleassistant.de/tips/tip69.htm.

    MfG, Thomas

    1. ...

      MfG, Thomas

      ....
      Danke Thomas, ich verstehe alles.
      Nur - viellecht muss ich es detaillierter ausführen -
      Ich habe mehrere hrefs auf der page, entsprechend dessen steuere ich auch den nächsten focus, wenn der server ein response liefert. D.h. dort setze ich auch den Focus(server-side). Mein Problem ist aber, dass wenn der user explizit ein anderes Feld anklickt, als das i.d. Applikation deklariertes FolgeFeld (wenn man Feld x verlässt soll autom. ins Feld y fokussiert werden, wenn der user nicht ein anderes Feld angewählt hat, nachdem man beim Server war) soll er ins angewählte Feld zurückfokussiert werden, nachdem der responsed.
      Um herauszufinden, ob der user nach dem onblur des Feldes x ein anderes Feld angeklickt hat (also den Focus verlegt hat) muss ich - bevor ich die Daten an den Server schicke - wissen wo der user zuletzt hinfokussiert hat. Geht das anders als wie jeden focus in einem Array zu speichern (thx. an BERND , Berdn??) und den letzten auszulesen?

      1. Hallo,

        Um herauszufinden, ob der user nach dem onblur des Feldes x ein anderes Feld angeklickt hat (also den Focus verlegt hat) muss ich - bevor ich die Daten an den Server schicke - wissen wo der user zuletzt hinfokussiert hat. Geht das anders als wie jeden focus in einem Array zu speichern (thx. an BERND , Berdn??) und den letzten auszulesen?

        Dort wo in meinem Beispiel der alert()-Aufruf steht, koennte auch stehen:

        f.name_eines_hidden_feldes.value = event.target.name; // dom
        bzw.
        f.name_eines_hidden_feldes.value = event.srcElement.name; // ie

        Dann steht der Feldname des zuletzt fokussierten Feldes im hidden-Feld.

        MfG, Thomas

      2. Hi,

        Um herauszufinden, ob der user nach dem onblur des Feldes x ein anderes Feld angeklickt hat (also den Focus verlegt hat) muss ich - bevor ich die Daten an den Server schicke - wissen wo der user zuletzt hinfokussiert hat.

        Zuletzt hat der User den Button oder den Link fokussiert, der das Absenden auslöst ...

        Du willst also nicht den letzten Fokus, sondern den vorletzten. Und der ist - wenn er nicht rechtzeitig gespeichert wurde - zum Zeitpunkt des Absendens nicht mehr bekannt.

        Geht das anders als wie jeden focus in einem Array zu speichern (thx. an BERND , Berdn??) und den letzten auszulesen?

        Ein Array ist dafür vollkommen überflüssig - Du willst ja nur einen Wert speichern. Und als Speicher-Ort dafür bietet sich das hidden-Feld an.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.