steffen: Countwodn funktioniert nicht

Hi Forumleser,

möchte ein stinknormalen Countdown machen mit einer anzeige.

<html><head><title>Test</title></head><body>
<script type="text/javascript">
var zahl=120;
function countdown(){
 document.write(zahl);
 zahl--;
 if(zahl!=0)
 {
  window.setTimeout("countdown();",1000);
 }
}
countdown();
</script>
</body></html>

Er macht 120, 119 und bleibt stehen...

wo liegt mein denkfehler?

danke für eure Hilfe

  1. Hallo,

    wo liegt mein denkfehler?

    Also ich muss zugeben ich komme jetzt irgendwie auch nicht drauf warum das passieren sollte. Ich habe das mal so nachgebaut wie ich es machen würde und so funktioniert es auch, vielleicht hilft es dir weiter:

    <html>  
     <head>  
      <title>Test</title>  
      <script type="text/javascript">  
       [code lang=javascript]function countdown(i, element, timeout) {  
        var zahl = document.createTextNode(" " + i);  
        document.getElementById(element).appendChild(zahl);  
        i--;  
        if(i>0) window.setTimeout("countdown(" + i + ", '" + element + "', " + timeout + ");", 1000);  
       }
    

    </script>
     </head>
    <body onload="countdown(120, 'countdown', 1000)">
    <p id="countdown"></p>
    </body>
    </html>[/code]

    Grüße
    Jeena Paradies

    --
    Open- vs. Closed Source Software - Verdienstmöglichkeiten | Jlog | Gourmetica Mentiri
    1. Hallo,

      if(i>0) window.setTimeout("countdown(" + i + ", '" + element + "', " + timeout + ");", 1000);

      Ähm sorry, das hätte natürlich heißen müssen:

      if(i>0) window.setTimeout("countdown(" + i + ", '" + element + "', " + timeout + ");", timeout);

      Grüße
      Jeena Paradies

      --
      Open- vs. Closed Source Software - Verdienstmöglichkeiten | Jlog | Gourmetica Mentiri
      1. Hi Jeena,

        bei dir passiert es nun, dass die alte Zahl stehen bleibt und die neue dahintersteht.

        mfg

        1. Hallo steffen.

          bei dir passiert es nun, dass die alte Zahl stehen bleibt und die neue dahintersteht.

          Dann schau dir einmal die von Jeena genutzten Methoden an und was sie bewirken. (Siehe hierzu das http://de.selfhtml.org/javascript/objekte/node.htm@title=node-Objekt.)
          Dadurch kannst du sein Skript eventuell auch in dieser Hinsicht ausbessern.

          Einen schönen Samstag noch.

          Gruß, Ashura

          1. Hi Ashura,

            nehme mal an, dass ich das mit deleteData() lösen muss oder?

            Gibt es keine andere möglichkeit?

            hab das mal gesehen, dass das wer mit:

            x = document.all[target];
            x.innerHTML = text;

            gemacht hat, aber das klappt auch nicht :-/

            mfg steffen

            1. Hallo steffen.

              nehme mal an, dass ich das mit deleteData() lösen muss oder?

              So umständlich würde ich mir das Ganze gar nicht machen.

              Ich würde in das p-Element mit der ID „countdown“ ein Leerzeichen setzen (→ damit existiert automatisch ein Textknoten und man erspart sich das Erstellen des selbigen).
              Nun kannst du mit Jeenas Script auf dieses p-Element zugreifen und den http://de.selfhtml.org/javascript/objekte/node.htm#node_value@title=nodeValue des <http://de.selfhtml.org/javascript/objekte/node.htm#first_child@title=ersten Kindes> (des Textknotens) modifizieren.

              Gibt es keine andere möglichkeit?

              hab das mal gesehen, dass das wer mit:

              x = document.all[target];
              x.innerHTML = text;

              gemacht hat, aber das klappt auch nicht :-/

              Du weißt, dass „klappt nicht“ den selben Aussagewert wie „Husseldiguggeldu“ hat?

              Gegen http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML ist nichts einzuwenden, doch http://de.selfhtml.org/javascript/objekte/all.htm@title=document.all sollte ebenso wenig wie document.layers verwendet werden.

              Da ich mich aber nie mit document.all befasst habe, kann ich nicht sagen, ob die Referenzierung über die ausführliche Objekt-Schreibweise (foo["bar"]) hier möglich ist und damit Zugriff auf Elemente gestattet.
              Wenn dies möglich sein sollte, musst du natürlich auch einen Wert für die Variable „target“ übergeben.

              Einen schönen Samstag noch.

              Gruß, Ashura

              --
              Last Tears Keep Calling
              See Angels Falling
              Black Shadows In Your Head
              And One Eye For The Dead
              1. Hi Ashura,

                danke für deine Hilfe :)

                Jetzt hab ich noch eine Frage: Du sagst document.all soll ich, genauso wie document.layer nicht verwenden.

                Dein Link zeigt aber nur Beispiele wo document.all genutzt wird. Würde mich mal interessieren, wieso das nich genutzt werden soll.

                mfg

                1. Hallo steffen.

                  Dein Link zeigt aber nur Beispiele wo document.all genutzt wird.

                  Nein, du meinst sicher innerHTML.
                  Ja, dies stammt ursprünglich von Microsoft und wird in SELFHTML leider nur in Verbindung mit document.all präsentiert, auch wenn es ebenso gut mit anderen Zugriffsmethoden nutzbar ist.

                  Würde mich mal interessieren, wieso das nich genutzt werden soll.

                  Im Gegensatz zu innerHTML, was die Arbeit unter Umständen enorm vereinfachen kann, bietet document.all keinen Vorteil gegenüber den handelsüblichen DOM-Methoden. Letztere vermögen sogar viel mehr zu bieten, sofern man sich ein wenig damit befasst.

                  Ich persönlich lehne die Nutzung von document.all ab, weil es ebenso wie document.layers gänzlich in Eigenregie entworfen wurde und die Unterstützung hierfür in Zukunft nicht gewährleistet werden kann.
                  Die DOM-Methoden hingegen sind standardisiert und erhöhen damit die Wahrscheinlichkeit, dass sie auch in vielen Jahren noch von den Clients verstanden und umgesetzt werden können.

                  Allzu oft ist man zwar nicht gezwungen, seine Skripte neu zu schreiben, weil man veraltete Methoden genutzt hat, aber wozu einen späteren Extraaufwand schaffen, wenn man es gleich besser™ machen kann?

                  Einen schönen Samstag noch.

                  Gruß, Ashura

                  --
                  Last Tears Keep Calling
                  See Angels Falling
                  Black Shadows In Your Head
                  And One Eye For The Dead
        2. Hallo,

          bei dir passiert es nun, dass die alte Zahl stehen bleibt und die neue dahintersteht.

          Ja, ich dachte das wäre so gewollt?!

          Grüße
          Jeena Paradies

          --
          Open- vs. Closed Source Software - Verdienstmöglichkeiten | Jlog | Gourmetica Mentiri
    2. Hi,

      Hallo,

      wo liegt mein denkfehler?
      Also ich muss zugeben ich komme jetzt irgendwie auch nicht drauf warum das passieren sollte.

      Beim ersten Aufruf von countdown() wird die Seite gerade noch aufgebaut, also schreibt document.write() in das Dokument. Danach wird sie abgeschlossen (</body></html>) und deswegen überschreibt der erneute Aufruf von document.write() das Dokument. Dann ist die Funktion weg und window.setTimeout() versucht eine Funktion aufzurufen, welche es nicht mehr gibt.

      Grüße,

      Ronny

      1. Hallo,

        Beim ersten Aufruf von countdown() wird die Seite gerade noch aufgebaut, also schreibt document.write() in das Dokument. Danach wird sie abgeschlossen (</body></html>) und deswegen überschreibt der erneute Aufruf von document.write() das Dokument. Dann ist die Funktion weg und window.setTimeout() versucht eine Funktion aufzurufen, welche es nicht mehr gibt.

        Aah raffiniert.

        Grüße
        Jeena Paradies

        --
        Open- vs. Closed Source Software - Verdienstmöglichkeiten | Jlog | Gourmetica Mentiri