Elmar: Wie erhalte ich den aktuellen Index eines Fomular-Elements?

Hallo,

ich benötige den aktuellen Index eines Formularelements, daß ich an eine Funktion übergeben möchte und das Element nachher wieder darüber ansprechen will.

Das Formular wird dynamisch aufgebaut und ich weiß vorher nicht an welcher Position das Feld stehen wird.

So nach dem Motto:
----------------------
calc(INDEX, value){
merk Dir, das dieser INDEX einen Wert angegeben hat
sprich ihn ggf. über document.form.elements[INDEX]... wieder an
}

<input ... onChange="javascript:calc(this.INDEX?,this.value)">
----------------------

Vielen Dank!
Elmar

  1. hi,

    ich benötige den aktuellen Index eines Formularelements, daß ich an eine Funktion übergeben möchte und das Element nachher wieder darüber ansprechen will.

    geht das nicht auch anders als über den index?

    <input ... onChange="javascript:calc(this.INDEX?,this.value)">

    das element selber hat natürlich keine ahnung davon, an welcher stelle es steht.
    wenn du diese info wirklich für erforderlich hältst, müsstest du sie m.E. schon selber ermitteln.
    bspw. referenz this an die funktion übergeben, und dort dann die elements-collection durchlaufen und auf übereinstimmung mit der übergebenen referenz abfragen ...

    gruß,
    wahsaga

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

      geht das nicht auch anders als über den index?

      Leider nicht. Da die Eingabefelder dynamisch sind und über ein Template eingeladen werden, sehe ich keine andere Möglichkeit. Die Felder heissen auch alle gleich und werden im Post zu Arrays verpackt.

      das element selber hat natürlich keine ahnung davon, an welcher stelle es steht.

      Warum "natürlich"? Eine Element ist doch ein ererbtes Objekt vom Typ Node. Sollte es da nicht eine Funktion geben, bei der man den Standpunkt im Nodebaum feststellen kann?

      wenn du diese info wirklich für erforderlich hältst, müsstest du sie m.E. schon selber ermitteln.
      bspw. referenz this an die funktion übergeben, und dort dann die elements-collection durchlaufen und auf übereinstimmung mit der übergebenen referenz abfragen ...

      Igitt ;-). Haben die Elemente denn eindeutige ID´s? Woran kann ich prüfen, ob ich in der richtigen Zeile bin, wenn der Index das einzige ist, was ein Input-Feld von einem anderen unterscheidet?

      Schöne Grüße,
      Elmar

      1. hi,

        geht das nicht auch anders als über den index?

        Leider nicht. Da die Eingabefelder dynamisch sind und über ein Template eingeladen werden, sehe ich keine andere Möglichkeit.

        na ja, meine frage zielte eher in die richtung, wofür du denn anschließend den index des feldes zu verwenden gedenkst, wenn du ihn erst mal ermittelt hättest.

        das element selber hat natürlich keine ahnung davon, an welcher stelle es steht.

        Warum "natürlich"?

        wozu sollte das element das wissen wollen?
        das wollen immer nur andere wissen, die beispielsweise das element über einen index in der elements-collection ansprechen wollen ;-)
        aber dem element selber ist es doch egal, welche index-nummer es nun hätte - es weiß, dass es this ist, und damit ist seinem wunsch nach persönlichkeitsentwicklung genüge getan.

        Eine Element ist doch ein ererbtes Objekt vom Typ Node. Sollte es da nicht eine Funktion geben, bei der man den Standpunkt im Nodebaum feststellen kann?

        nicht das ich wüßte.

        Haben die Elemente denn eindeutige ID´s?

        die frage müsstest du doch wohl eher beantworten können.

        wenn du meinst, ob das element selber weiß, welche ID es hat: this.id sollte am element natürlich gesetzt sein, so es denn eine bekommen hat.

        Woran kann ich prüfen, ob ich in der richtigen Zeile bin, wenn der Index das einzige ist, was ein Input-Feld von einem anderen unterscheidet?

        ist er ja nicht.
        mit this übergibst du die referenz auf das input-feld, von dem aus du die funktion aufrufst. wenn du diese referenz jetzt mit allen in der elements-collection abgelegten referezen vergleichst, ergibt dieser vergleich ja nur an einer einzigen stelle true. bei welchem index der elements-collection du dann gerade bist, kannst du ja an deinem schleifenzähler ablesen.

        btw: da fällt mir gerade noch ein anderer, ggf. gangbarer weg ein:
        du schreibst dir eine initialisierungsfunktion, die onLoad alle elements per schleife durchläuft, und jedem eine _zusätzliche_ eigenschaft mit einem namen wie meinetwegen meinIndex verpasst, wo du dann den aktuellen schleifenzähler reinschreibst:

        var anzahlElemente = document.{formularname}.elements.length;
        for(var i=0; i < anzahlElemente; i++) {
          document.{formularname}.elements[i].meinIndex = i;
        }

        dann solltest du aus dem element heraus über this.meinIndex zugriff auf den vorher "ermittelten" index des jeweiligen elements haben.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Igitt ;-). Haben die Elemente denn eindeutige ID´s? Woran kann ich prüfen, ob ich in der richtigen Zeile bin, wenn der Index das einzige ist, was ein Input-Feld von einem anderen unterscheidet?

        Das stimmt nicht jedes Feld unterscheidet sich per se von dem anderen

        Neben der von wahsaga vorgestellten Möglichkeit kannst du auch (und das jetzt mehr zum verdeutlichen) jedes mal alle Elemente durchlaufen.

        z.b.
        <input ... onChange="calc(this)">

        (das javascript Label ist in Skript handler überflüssig)

          
        function calc(elem)  
        {  
        for(var i = 0; i < elem.form.elements.length;i++)  
        if(elem == elem.form[i]) return alert('Ich bin ' + i);  
        }  
        
        

        Struppi.