JS-N00b: aktuellen Variablenwert schreiben

Hallo liebe Community,

ich bin Anfänger im Bereich Javascript / DOM und habe folgendes Problem:
Mittels AJAX / DOM / JSON erzeuge ich einen Tabelle, in welche ein Bild eingehängt wird und welches dann mittels OnClick auf eine neue Seite verweisen soll. Dies geschieht in einer FOR-Schleife... AJAX / DOM funktinieren wunderbar, mein Quellcode sieht folgendermaßen aus:

  
cellContent.onclick = function(){ self.document.location.href=myElement.Link;}  

Zur Erläuterung:
cellContent: die erzeugte Zelle mit Bild
myElement.Link: Link für das jeweilige betreffende Bild

OnClick Funktion arbeitet wunderbar, jedoch habe ich das Problem dass wenn ich jetzt auf die einzelnen Bilder klicke mich der Browser immer auf den Link der letzten Variable der FOR-Schleife verweist.. Beispiel:
Bild 1 -> Link 1
Bild 2 -> Link 2
Bild 3 -> Link 3
Egal auf welches Bild ich klicke, ich werde immer zu Link 3 verwiesen, woran liegt das und wie kann ich dieses Problem lösen? Vielen Dank für eure Zeit und Mühe!

LG

JS-N00b

  1. Moin,

    ich vermisse den Code der For-Schleife, ohne den kann man nicht viel sagen. Aber du möchtest bestimmt mit http://de.selfhtml.org/javascript/objekte/array.htm@title=Arrays arbeiten.

    Gruß,
    Take

    1. Moin,

      ich vermisse den Code der For-Schleife, ohne den kann man nicht viel sagen. Aber du möchtest bestimmt mit http://de.selfhtml.org/javascript/objekte/array.htm@title=Arrays arbeiten.

      Gruß,
      Take

      Vielen Dank für die schnelle Antwort. Ich arbeite jedoch schon mit Arrays: Auszug aus meinen Quellcode (sehr komplex und auch in PHP geschrieben, deswegen nur einen Auszug):

      for (var key in myObject) {  
      var myElement = myObject[key];  
      ...  
      cellContent.onclick = function(){ self.document.location.href = myElement.Link; }  
      ...  
      }  
      
      

      Zur Erläuterung:
      myObject ist der Rückgabewert von einem AJAX-erzeugten multidimensionalen Array, in welches die Bilderattribute (src, alt, usw) als auch der Verweis gespeichert werden. Hoffe ich konnte den Sachverhalt verständlich erläutern, nochmals vielen Dank für die Unterstützung

      LG

      JS-N00b

      1. Om nah hoo pez nyeetz, JS-N00b!

        for (var key in myObject) {
        
        > 
        
        

        Eine For-Schleife ist meines Wissens auch in JS eine Zählschleife, also

        for (var k=0, k < 10, k++)

        Möglicherweise möchtest du eine while-Schleife verwenden.

        Matthias

        --
        1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
        1. Om nah hoo pez nyeetz, JS-N00b!

          for (var key in myObject) {

          
          >   
          > Eine For-Schleife ist meines Wissens auch in JS eine Zählschleife, also  
          >   
          > `for (var k=0, k < 10, k++)`{:.language-javascript}  
          >   
          > Möglicherweise möchtest du eine while-Schleife verwenden.  
          >   
          > Matthias  
            
          Danke Matthias für deine Antwort.. Die FOR-IN Schleife verwende ich um das multidimensionale Array auszulesen, die einzelnen Arrays in diesem Array enthalten die Links und Bildattribute die ich mittels DOM in den Quellcode einbinden möchte. Aus welchen Grund sollte ich eine while-Schleife verwenden? Würde vermutlich auch nicht das Problem lösen, welches sich ja auf die Ausgabe der temporären Variablenwerte des myElement.Link Elements bezieht, oder?  
            
          LG
          
      2. Hi,

        for (var key in myObject) {

        var myElement = myObject[key];
        ...
        cellContent.onclick = function(){ self.document.location.href = myElement.Link; }
        ...
        }

          
        Du verwendest Closures falsch.  
          
        Am Ende der Schleife hat myElement den Wert des letzten Objekts in myObject.  
        Da ergibt self.document.location.href = myElement.link natürlich immer das gleiche.  
          
        Mir fällt kein leichterer Weg ein als dieser:  
          
        ~~~javascript
        cellContent.onclick =  
        (function(myElement){  
          return function(){  
            self.document.location.href = myElement.Link;  
          }  
        })(myObject[key]);
        

        ~dave

        1. Hi,

          Mir fällt kein leichterer Weg ein als dieser:

          Mir schon.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. Hi,

            Mir fällt kein leichterer Weg ein als dieser:

            Mir schon.

            IMHO bezieht sich deine Antwort auf ein anderes Problem als das wofür mir kein leichterer Weg einfällt.

            ~dave

        2. Danke Dave,

          dein Lösungsansatz funktioniert wunderbar! Vielen Dank für deine Zeit und Mühe!

          LG

          JS-N00b

        3. Mir fällt kein leichterer Weg ein als dieser:

          Hört sich nach einem Anwendungsfall für Event Delegation an.

          Es sind verschiedene Möglichkeiten denkbar, um vom geklickten Element auf den entsprechenden Array-Eintrag mit den nötigen Informationen zu kommen. Eine Closure für jedes einzelne Element ist eine davon.

          Mathias

  2. Hi,

    Mittels AJAX / DOM / JSON erzeuge ich einen Tabelle, in welche ein Bild eingehängt wird und welches dann mittels OnClick auf eine neue Seite verweisen soll.

    Warum erzeugst du dafür nicht schlicht und einfach ein A-Element?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?