aktuellen Variablenwert schreiben
JS-N00b
- javascript
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
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
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
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
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
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
Hi,
Mir fällt kein leichterer Weg ein als dieser:
MfG ChrisB
Hi,
Mir fällt kein leichterer Weg ein als dieser:
IMHO bezieht sich deine Antwort auf ein anderes Problem als das wofür mir kein leichterer Weg einfällt.
~dave
Danke Dave,
dein Lösungsansatz funktioniert wunderbar! Vielen Dank für deine Zeit und Mühe!
LG
JS-N00b
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
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