Ich verstehe setTimeout nicht
pepebe
- javascript
0 wahsaga0 Klawischnigg0 pepebe
Moin, vielleicht möchte mir jemand den Weg weisen...
Ich habe eine Tabelle mit 10x10 Feldern. Jede Zelle hat eine eigene ID vom Typ PosX.Y.
In dieser Tabelle möche ich mit Abstand von 1 Sekunde in einer Reihe von Zellen den Inhalt verändern.
Hierzu habe ich mir folgendes ausgedacht:
Die In Frage kommenden Felder habe ich in einem Array abgelegt.
Ich möchte, daß die folgende Schleife die Funkion Move 10 Mal ausführt und dazwischen jeweils eine Pause von 1 Sekunde einlegt...
--------------------------------
Movement = new Array("Pos1.1",
"Pos1.2",
"Pos2.2",
"Pos2.3",
"Pos3.3",
"Pos3.4",
"Pos3.5",
"Pos3.6",
"Pos4.6",
"Pos5.6",
"Pos6.6"
);
function Move(t){
document.getElementById(Movement[t]).innerHTML = "x";
}
t=0;
while (t<10){
TT = t*1000;
setTimeout("Move(t)"1000);
t = t + 1;
}
--------------------------
funktioniert nicht. Ich erhalte lediglich den Eintrag in Schritt 10 (Pos 6.6). Die Schritte davor bleiben unbearbeitet.
Wenn ich folgendermaßen komme ich zum selben Ergebnis:
t=0;
setTimeout("Move(t)"1000);
t=1;
setTimeout("Move(t)"1000);
t=2;
setTimeout("Move(t)"1000);
t=3;
setTimeout("Move(t)"1000);
Am Ende sehe ich lediglich t=9.
Wenn ich jedoch folgendes versuche:
t=0;
setTimeout("Move(t)"1000);
t=1;
setTimeout("Move(t)"2000);
t=2;
setTimeout("Move(t)"3000);
...
Komme ich zum Ziel. Die Zeitangabe mit einer Variablen zu ersetzen führt wieder dazu, daß ich augenblicklich (0 Millisekunden später) das Ergebenis von t=9 sehe:
t=0;
while (t<10){
TT = t*1000;
setTimeout("Move(t)",TT);
t = t + 1;
}
Erleuchtet mich, bitte!!!
hi,
t=0;
while (t<10){
TT = t*1000;
setTimeout("Move(t)",TT);
t = t + 1;
}
du übergibst hier den wert von t nicht richtig an die funktion Move().
funktionieren sollte:
window.setTimeout("Move("+t+")", TT);
damit hast du im ersten parameter von setTimeout, der vom typ string ist, jeweils den aktuellen wert von t drinstehen.
gruß,
wahsaga
Hi there,
function Move(t){
document.getElementById(Movement[t]).innerHTML = "x";
}t=0;
while (t<10){
TT = t*1000;
setTimeout("Move(t)"1000);
t = t + 1;
}funktioniert nicht.
Kann es auch nicht, ergibt auch unter Garantie eine Fehlermeldung, die Du nur nicht siehst, weil Du Dir die js-Fehler im IE nicht anzeigen läßt. Deine Konstruktion würde richtigerweise so aussehen:
t=0;
function Move(t)
{
document.getElementById(Movement[t]).innerHTML = "x";
t++;
if (t < 10)
{
setTimeout("Move(t)", 1000);
}
}
Erleuchtet mich, bitte!!!
Nein. Davon hast Du nichts. Je größer der Dachschaden, desto freier der Blick in den Himmel...
Hi there,
Nachsatz:
t=0;
function Move()
{
document.getElementById(Movement[t]).innerHTML = "x";
t++;
if (t < 10)
{
setTimeout("Move()", 1000);
}
}
wenn Du t so wie beschrieben global definierst, dann ist Move natürlich parameterlos. Ob das sinnvoll ist, hängt vom Gesamtkonzept Deines Programms ab...
Vielen Dank für die hilfreichen Antworten!!!
Die Antwort liegt mal wieder in der Mitte...
Movement = new Array("Pos1.1",
"Pos1.2",
"Pos2.2",
"Pos2.3",
"Pos3.3",
"Pos3.4",
"Pos3.5",
"Pos3.6",
"Pos4.6",
"Pos5.6",
"Pos6.6"
);
function Move(t)
{
document.getElementById(Movement[t]).innerHTML = "x";
t++;
if (t<Movement.length){
window.setTimeout("Move("+t+")",200);
}
}
Klappt wundervoll. Als nächstes arbeite ich daran den jeweils letzten Schritt zu löschen...
Vielen Dank an alle!!!