Helena: Countdown etwas anders

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

  1. 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

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
  2. 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

    1. 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

      1. --> 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)?

        1. 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">&nbsp;</p>
          ( Das &nbsp; wird benötigt, damit das Element schon einen Kindknoten hat. )

          document.getElementById("zaehler").firstChild.nodeValue = i + "test"

          Gruß, Jürgen

  3. 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