JCB: Index im getElementsByName-Array ermitteln (IE 6.0)

Hallo Forumgemeinde!

Es sei folgender HTML-Codeschnipsel gegeben ;):

--------- schnipp ---------

<input name="TestFeld" type="text" value="">
<input name="TestFeld" type="text" onkeyup="Check(this)" value="">
<input name="TestFeld" type="text" onkeyup="Check(this)" value="">
<input name="TestFeld" type="text" onkeyup="Check(this)" value="">
<input name="TestFeld" type="text" onkeyup="Check(this)" value="">
<input name="TestFeld" type="text" onkeyup="Check(this)" value="">

--------- schnapp ---------

Mit der JS-Funktion getElementsByName("TestFeld") kann man ja wunderbar auf alle Inputfelder zugreifen. In meiner Check-Funktion muss ich aber den Index von dem Input-Feld wissen, dessen Inhalt geändert wurde, um evtl. anschliessend den Inhalt des vorherigen Feldes (index - 1) ändern zu können.

1. Wie kann ich den Index des vorherigen Feldes ermitteln?
2. Wie kann ich den Wert des vorherigen Feldes evtl. ohne den Index zu kennen verändern?

Gruß, Jan

PS: Vielleicht liegts auch an der Hitze (35° im Schatten), dass mir nichts einfällt.

  1. hi,

    In meiner Check-Funktion muss ich aber den Index von dem Input-Feld wissen, dessen Inhalt geändert wurde, um evtl. anschliessend den Inhalt des vorherigen Feldes (index - 1) ändern zu können.

    Du brauchst nicht den "Index".
    Betrachte den previousSibling des aktuellen Feldes - und reagiere geeignet auf den Sonderfall, dass dieser sich ggf. durch Nichtexistenz auszeichnet.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Betrachte den previousSibling des aktuellen Feldes

      Ergänzung: Ggf. aufpassen, falls sich daziwschen - je nach Browser - auch noch (white space-)Textknoten befinden.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Moin wahsaga!

        Betrachte den previousSibling des aktuellen Feldes

        Ergänzung: Ggf. aufpassen, falls sich daziwschen - je nach Browser - auch noch (white space-)Textknoten befinden.

        previousSibling hab ich auch schon in Betracht gezogen. Jedoch habe ich leider mal wieder was vergessen zu sagen/schreiben: zwischen den input-Feldern können unregelmäßig viele Elemente vorhanden sein. Deshalb hat mich previousSibling auch nicht wirklich weitergebracht. Momentan hab ich eine Schleife als Behelf, in der das veränderte Objekt mit den Feldern verglichen wird. Darüber krieg ich den Index raus. Gefällt mir zwar nicht wirklich, aber es hilft mir erstmal weiter. Trotzdem Danke für die Antwort - bei der Wärme/Hitze :)!

        Gruß,
        Jan

        1. hi,

          previousSibling hab ich auch schon in Betracht gezogen. Jedoch habe ich leider mal wieder was vergessen zu sagen/schreiben: zwischen den input-Feldern können unregelmäßig viele Elemente vorhanden sein. Deshalb hat mich previousSibling auch nicht wirklich weitergebracht. Momentan hab ich eine Schleife als Behelf

          Du kannst auch vom Element aus so lange "weiter nach vorne" gehen, wie ein previousSibling existiert, und prüfen ob dieser ein Input-Feld und wenn ja vom Typ text ist - läuft also auch auf eine Schleife hinaus.

          Oder, anderer Weg:
          Du schreibst dir eine Initialisierungsroutine, die nach dem Laden des Dokumentes einmal alle in Frage kommenden Inputfelder durchläuft, dabei einen Zähler mitlaufen lässt - und dessen Stand am Inputfeld selber hinterlegt.

            
          var Testfelder = document.getElementsByName("TestFeld");  
          for(i=0, l=Testfelder.length; i<l; i++) {  
             Testfelder[i].testFeldNummer = i;  
          }
          

          Damit hast du dann in deiner Funktion check über die Eigenschaft testFeldNummer immer den Zugriff auf die "Nummer" dieses Elements.

          Achtung: Das geht natürlich nur, wenn das Formular nicht per Javascript um weitere Felder dieser Art erweitert wird - dann würden sich die Indices ja ggf. verschieben.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }