tommy: das aktive eingabefeld herausfinden

moin,

habe grob gesagt eine textarea und darunter 4 text inputfelder, wie unter:

Frage: <textarea type="text" class="rahmen" id="question" name="question" COLS="50" ROWS="3"/></textarea><br><br>

Antwort 1: <input type="text" class="rahmen" id="answer1" style="width:300px; " name="answer1" value=""/> <input type="checkbox" name="correct-1" value="1"   checked="checked"><br>
Antwort 2: <input type="text" class="rahmen" id="answer2" style="width:300px; " name="answer2" value=""/> <input type="checkbox" name="correct-2" value="1" ><br>
Antwort 3: <input type="text" class="rahmen" id="answer3" style="width:300px; " name="answer3" value=""/> <input type="checkbox" name="correct-3" value="1" ><br>
Antwort 4: <input type="text" class="rahmen" id="answer4" style="width:300px; " name="answer4" value=""/> <input type="checkbox" name="correct-4" value="1" ><br><br><br>

Jetzt möchte in mit einer javascript function rausfinden, welches feld gerade aktive ist, sprich, wo der cursor drin ist, um eben da etwas einfügen zu können.

spontan dachte ich an :

var inputs = document.getElementsByTagName('input');
var lastTextBox = null;

for(var i = 0; i < inputs.length; i++)  

{
  if(inputs[i].getAttribute('type') == 'text')
  {
    inputs[i].onfocus = function() { lastTextBox = this; }
  }
}

alert(lastTextBox.id);  

}

was ich für recht clever hielt, aber leider nicht funktioniert. Daher meine frage: wir tune ich den code, damit er wirklich den richtigen kasten findet, und wie kann ich bei der gelegenheit auch noch die textarea mit in die abfrage integrieren?

kann mir da vielleicht jemand helfen?

danke 1000 mal

  1. Moin!

    Wenn das in Deinem Dokument nicht anders strukturiert ist, dann hast Du beim Abruf kein Element, welches zuvor den focus erhielt und die Funktion anschießen konnte.

      
    var lastTextBox = null;  
    var inputs = document.getElementsByTagName('input');  
    for(var i = 0; i < inputs.length; i++) {  
         if(inputs[i].getAttribute('type') == 'text')  {  
              inputs[i].onfocus = function() {  
                   lastTextBox = this; alert(lastTextBox.id);  
              }  
         }  
    }
    

    könnte also ein ganz anderes Ergebnis haben. (Nicht getestet)

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Moin!

      selber,

      klappt in der tat ganz toll, hat nur den nachteil, dass ich erst die funktion aufrufen muss und dann beim anklicken des textfeldes gemeldet bekomme, dass eben das jetzt aktive ist. die idee war aber, schon beim ausführen der funktion zu erfahren, welches textfeld aktuell aktiv ist, nicht welches ich evetuell als nächstes auswähle. generell hab ich ja vor, einen markierten text zu ersetzen oder an der cursorposition etwas einzufügen. da wäre es gut zu wissen, in welchem textfeld der cursor aktuell ist. hatte mir das auch etwas leichter vorgestellst, aber die beispiel sehen passenderweise immer nur ein textfeld vor.

      gruß

      1. Moin!

        Nach dem Laden oder Vervollständigen des Dokuments (z.B. per Ajax) ausführen:

        var  lastTextBox = null;  
        var inputs = document.getElementsByTagName('input');  
          
        for(var i = 0; i < inputs.length; i++) {  
             if(inputs[i].getAttribute('type') == 'text')  {  
                  inputs[i].onfocus = SetLastTextBox(inputs[i]);  
             }  
        }  
          
          
        function SetLastTextBox(obj) {  
            lastTextBox = this;  
            alert(lastTextBox.id);  
        }  
        
        

        Ungetestet.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

        1. Moin!

          function SetLastTextBox(obj) {
              //lastTextBox = this;

          lastTextBox = obj;

          alert(lastTextBox.id);
          }
          [/code]

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

          1. hab jetzt mit onfocus das aktuelle feld an eine variable übergeben und die dann ausgelesen. ist vielleicht nicht so fein, geht aber trotzdem. danke für die hilfe.

            gruß