Akela: setTimeout

Hallo,

irgendwie habe ich ein Verständnisproblem mit der setTimeout-Funktion.
Ich habe folgenden Codeschnipsel:

function nop()
  {
    return(true)
  }

for( idx=13; idx<=17; idx++ )
  {
    window.setTimeout( "nop()", 2000 );
    document.getElementById( "xxx" ).firstChild.nodeValue = idx;
  }

Erwartet hätte ich jetzt, daß der Text im p-Tag alle zwei Sekunden geändert wird. Tatsächlich zeigt der p-Tag sofort den Maximalwert an.
Was habe ich hier falsch gemacht ?

ciao Andreas

  1. Hallo Akela,

    die setTimeout-Funktion ruft eine weitere Funktion zeitverzögert auf. Sie wartet nicht auf das Beenden der Funktion.

    Gruß, Jürgen

    1. Hallo Jürgen,

      das erklärt mein Problem natürlich. Manchmal ist man wirklich vernagelt ;-)
      Was ich brauche, ist ein delay innerhalb der Schleife. Gibt es hier eine Möglichkeit außer eine Zählschleife zu verwenden ?

      ciao Andreas

      1. Hallo Akela,

        du legst den Code in eine Funktion, die sich per setTimeout selbst aufruft, bis die Aufgabe gelöst ist. Der "Schleifenzähler" muss dann aber eine globale Variable sein.

        Gruß, Jürgen

      2. hi,

        Was ich brauche, ist ein delay innerhalb der Schleife.

        So etwas kennt Javascript nicht.

        Gibt es hier eine Möglichkeit außer eine Zählschleife zu verwenden ?

        Du könntest bei deinem Beispiel ja die Verzögerung für setTimeout bereits mit einem Faktor multiplizieren - also Timeouts für den Aufruf in 2000, 4000, ... Millisekunden setzen.

        Aber in so einem Falle wäre es vermutlich einfacher, gleich setInterval zu verwenden.
        Dann zählst du bei jedem Aufruf einen Zähler hoch - und wenn dieser den Maximalwert erreicht hat, beendest du das Intervall wieder.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }