Array - Übergabe schlägt fehl !?
Pedda
- javascript
Hallo zusammen,
Ich poste mal einfach meinen code und setze Kommentare dazu....
Das veranschaulicht mein Problem wohl am einfachsten *g*
Also :
function doit(MA,st) {
// Funktionsaufruf mit MA=Array (Werte 1 - 45) und st=0
alert('Array\n '+MA+' \n Stelle '+st);
// Ausgabe1: Array 1,2,3,...44,45 Stelle 0
sid = MA[st];
alert('FeldID '+sid);
// Ausgabe2: FeldID 0
if(st<44) {
st = st+1;
alert('Array :\n '+MA+' \n Stelle '+st);
// Ausgabe3: Array 1,2,3,...44,45 Stelle 1
window.setTimeout("doit("+MA+","+st+")",50);
}
}
Der erste Lauf der Funktion ist problemlos.
Anscheinend geht aber das Array beim Timeout("doit... verloren, denn *Ausgabe1* lautet beim zweiten Lauf : "Array 2 Stelle 1"
Versteht jemand was ich meine ? *g*
...und kann mir jemand sagen wo die anderen Werte des Array geblieben sind ?
Thnx
Gruss
Pedda
Ich poste mal einfach meinen code und setze Kommentare dazu....
Das veranschaulicht mein Problem wohl am einfachsten *g*
Das ist nicht ganz nett was du da machst.
Ich hab den Code nicht ausprobiert, aber wenn ich das richtig sehe, soll dieser 44 mal rekursiv die gleiche Funktion durchlaufen und jeweils dreimal ein alert ausgeben (wenn er funktionieren würde).
Das wären 132 mal ein alert Fenster! :-(
Nun zu deinem Problem:
window.setTimeout("doit("+MA+","+st+")",50);
Mit setTimeout startest du ein JS verzögert, wenn du die Stringvariante wählst im Prinzip wie eval um zu sehen was du da wirklich machst lass dir den Inhalt des Befehls mal anzeigen:
alert("doit("+MA+","+st+")",50);
Du hast zwei Möglichkeiten, entweder du machst MA (Großbuchstaben für Variabeln ist sehr unüblich) global und verzichtest auf den Parameter.
Oder du erzeugst eine anonyme Funktion z.b. so:
window.setTimeout(function() {doit(MA, st); }, 50);
Struppi.
Hi Struppi
Das wären 132 mal ein alert Fenster! :-(
debugging ??? *g*
Klar kommen die alerts raus *g*
alert("doit("+MA+","+st+")",50);
Gute Idee... mal gucken!
Pedda
Servus,
soweit ich weis können bei window.setTimeout nur Strings übergeben werden.
Du musst deine Funktion einfach direkt aufrufen dann sollte es gehen.
Also antatt:
window.setTimeout("doit("+MA+","+st+")",50);
machst du:
window["doit"](MA, st);
Gruß,
Bene
soweit ich weis können bei window.setTimeout nur Strings übergeben werden.
falsch, auch Funktionsreferenzen funktionieren in den meisten Browsern.
Du musst deine Funktion einfach direkt aufrufen dann sollte es gehen.
Das will er ja vermutlich gerade nicht.
Also antatt:
window.setTimeout("doit("+MA+","+st+")",50);
machst du:
window["doit"](MA, st);
Naja, das ist das Gleiche wie: doit(Ma, st)
Struppi.
Moin
window.setTimeout("doit(["+MA+"],"+st+")",50);
die eckigen Klammern verhindern, dass die ersten beiden Array-Elemente als Funktions-Argumente interpretiert werden.
Gruß
rfb