Countdown etwas anders
Helena
- javascript
Hallo zusammen,
wir sollen einen Countdown realisieren, allerdings so dass eine Sache, in dem Fall die Sekundenzahl, immer wieder aufgerufen werden muss. Das habe ich mit einer for-Schleife versucht, aber irgendwei funktioniert das nicht so wie ich es mit erhofft hatte.
Hier mal mein Versuch:
<html>
<head>
<title></title>
</head>
<body>
<script language="JavaScript">
<!--
function zeitvorbei()
{
document.write(i + "test");
}
for (var i=10, i=>0, i--)
{
setTimeout ("zeitvorbei()", 1000);
}
//-->
</script>
</body>
</html>
Ihr könnt mir bestimmt helfen :) Danke
Grüße,
das ist eine endlosschleife Oo?die finktion ruft sich jedesmal neu auf und dabei wird ja i neu auf 0 gesetzt
MFG
bleicher
Hallo Helena,
du solltest dir noch einmal genau durchlesen, was setTimeout macht. Es ruft eine Funktion zeitverzögert auf und geht dann sofort zum nächsten Befehl weiter. setTimeout ist kein Delay/Wait.
for (var i=10, i=>0, i--)
{
setTimeout ("zeitvorbei()", 1000);
}
//-->
Hier rufst du 11mal setTomeout auf, und das mit minimaler Verzögerung. Daher startet die Funktion "zeitvorbei" nach einer Sekunde 11mal mit minimaler Verzögerung.
Du musst in der Funktion prüfen, ob sie noch einmal zeitverzögert aufgerufen werden soll, und dieses dann per setTimeout tun:
var i=10;
function zeitvorbei()
{
document.write(i + "test");
i-=1
if(i>=0) setTimeout ("zeitvorbei()", 1000);
}
(ungetestet)
Die "Profiversion" findest du hier:
http://aktuell.de.selfhtml.org/artikel/javascript/timer/
Gruß, Jürgen
var i=10;
function zeitvorbei()
{
document.write(i + "test");
i-=1
if(i>=0) setTimeout ("zeitvorbei()", 1000);
}
(ungetestet)
Gruß, Jürgen
--> zumindest zählts jetzt schonmal 10, 9 :D
--> zumindest zählts jetzt schonmal 10, 9 :D
Zählt das überhaupt mehrmals? Wird durch das zeitverzögerte Aufrufen von document.write() nicht einfach das bisher vorhandene Dokument gelöscht (und damit auch die Funktion)?
Hallo noscript,
Zählt das überhaupt mehrmals? Wird durch das zeitverzögerte Aufrufen von document.write() nicht einfach das bisher vorhandene Dokument gelöscht (und damit auch die Funktion)?
da könnterst du recht haben. Auf das document.write habe ich garnicht geachtet.
@Helena
Du solltest auf document.write verzichtet und statt dessen lieber die DOM-Methoden einsetzen. Siehe z.B.
http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id
http://de.selfhtml.org/javascript/objekte/node.htm#node_value
Das Beispiel im zweiten Link funktioniert auch mit <p id="... an Stelle des input-Tags:
<p id="zaehler"> </p>
( Das wird benötigt, damit das Element schon einen Kindknoten hat. )
document.getElementById("zaehler").firstChild.nodeValue = i + "test"
Gruß, Jürgen
Hallo Helena,
eine for-Schleife ist in diesem Fall nicht geeignet. Definiere den Zählerwert außerhalb der Funktion zeitvorbei(), und prüfe den Wert entweder mit if oder while.
mfg mysch