Andreas: function dynamisch anhängen

Ich will in einer Schleife an objekte in einer Liste eine neue funktion anhängen, die bei onclick ausgeführt wird. Der angehängden Funktion soll eine laufende Nummer als Parameter mitgegeben werden:

for(var i=0;i<list.length;i++){       list[i].childNodes[1].onclick=function(){changeArtikel(i)};
}

Das Problem ist aber nun, dass i nicht als Zahl übergeben wird, sondern als Varible bestehn bleibt und bei allen Elementen nun immer der Wert den i als letztes beim durchlaufen der Schleife hatte, übergeben wird.

Gibts eine Lösung für das Problem?

  1. Hi,

    Gibts eine Lösung für das Problem?

    Bin nicht ganz sicher, ob ich das Problem richtig verstanden hab...
    wenn du quasi Drei Elemente in der Liste hast wird mit jedem Funktionsaufruf 2 übergeben oder wie?

    Ich habs jetzt zwar nicht ausprobiert und nicht genau verstanden, was du machen willst, aber das könnte gehen:

    var globaleVariable = 0;

    for(var i=0;i<list.length;i++){
    list[i].childNodes[1].onclick=function(){changeArtikel(globaleVariable);
    globaleVariable++;
    }

    greets

    Michael

    1. Bin nicht ganz sicher, ob ich das Problem richtig verstanden hab...
      wenn du quasi Drei Elemente in der Liste hast wird mit jedem Funktionsaufruf 2 übergeben oder wie?

      Ja genau das ist mein Problem.

      Ich habs jetzt zwar nicht ausprobiert und nicht genau verstanden, was du machen willst, aber das könnte gehen:

      var globaleVariable = 0;

      for(var i=0;i<list.length;i++){
      list[i].childNodes[1].onclick=function(){changeArtikel(globaleVariable);
      globaleVariable++;
      }

      So hatte ich das auch schon probiert kommt aber aufs selbe raus.

      mach das ganze jetzt so
          list[i].childNodes[1].onclick=function(){changeArtikel(this.id)};
      list[i].childNodes[1].id="h"+j;

      und wenn die Funktion aufgerufen wird hole ich mir die Nummer mit slice(1,id.length) wieder raus. Sicherlich nicht ganz sauber aber es klappt.

      1. So hatte ich das auch schon probiert kommt aber aufs selbe raus.

        mach das ganze jetzt so
            list[i].childNodes[1].onclick=function(){changeArtikel(this.id)};

        und wenn die Funktion aufgerufen wird hole ich mir die Nummer mit slice(1,id.length) wieder raus. Sicherlich nicht ganz sauber aber es klappt.

        Warum so umständlich?

        list[i].childNodes[1].i = i;
        list[i].childNodes[1].onclick=function(){changeArtikel(this.i)};

        Struppi.

        1. Danke. Wusste nicht das es so einfach geht.

          1. Danke. Wusste nicht das es so einfach geht.

            Du kannst jedes belibiege Objekt mit so vielen Attributen wie du Lustig bist erweitern. Du kannst nur nicht alle überschreiben.

            Struppi.