Sven Rautenberg: Countdown-Funktion

Beitrag lesen

Moin!

<script type="text/javascript">
<!--
function Schleife()
{
var i = 1;
do
  {
  setTimeout('Countdown(i)', 1000);

Die Methode setTimeout läuft sofort weiter! Du stellst hier also in schneller Abfolge genau 10 Timeouts in die Warteschlange, die _alle_ nach 1000 Millisekunden abgearbeitet werden, aber nicht nach jeweils einer Sekunde Wartezeit. Sowas ist für einen Countdown aber wichtig.

Und zweitens rufst du die in den Anführungsstrichen angegebene Funktion auf. Die Funktion lautet: Countdown(i).

Nun ist es aber leider so, dass keine globale Variable i existiert, weshalb du sie auch nicht an die Funktion übergeben kannst. Stattdessen wäre es viel besser, wenn du eine fest angegebene Zahl an die Funktion übergibst.

Also: setTimeout('Countdown('+i+')',1000); Das generiert den Code, um Countdown(1) etc. aufzurufen.

Bleibt noch das Problem der Gleichzeitigkeit. Und das löst sich entweder mit oesi50's Code, oder so:

for (i=1; i<=10; i++)
{
  setTimeout('Countdown('+i+')', 1000*i);
}

Damit werden in schneller Reihenfolge Timeout-Funktionen gesetzt, die in 1*1000, 2*1000, 3*1000... Millisekunden aufgerufen werden.

function Countdown(i2)
{
  document.write(i2 + '<br>');
}

Diese Funktion kann so bleiben. Allerdings: Warum verwendest du als Variable "i2"? Du kannst einfach i nehmen, das ist dann eine lokale Variable. Da du keine globale Variable gleichen Namens verwendest, stört das absolut nicht.

Bedenke noch, dass dein document.write() die Inhalte des vorher geladenen Dokuments löscht! Dein Javascript wird also auch gelöscht und verschwindet. Möglicherweise erzeugt das deshalb spontan weitere Fehlermeldungen. Zum Testen eignet sich besser ein Formularfeld, dem du den Wert zuweist. Dann kommt dein Javascript nicht abhanden.

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|