Casablanca: jQuery-Interval

Hallo Forum,

ich hab eine Frage bezüglich des jQuery-Interval-Element. Ich habe folgendes:

  
var refreshId = setInterval(function () {  
   alert("Test");  
}, 5000);  

Das funktioniert auch gut. Das Problem ist, das beim ersten mal auch 5-Sekunden dauert bis das Intervall feuert. Gibt es eine Möglichkeit, dass das Intervall beim ersten mal sofort startet und dann 5-Sekunden wartet?

Also momentan ist so:
5-Sekunden Wartezeit
alert
5-Sekunden Wartezeit
alert
...

Was ich möchte, ist:
alert
5-Sekunden Wartezeit
alert
5-Sekunden Wartezeit
alert
...

Danke im Voraus.

  1. ich hab eine Frage bezüglich des jQuery-Interval-Element. Ich habe folgendes:

    var refreshId = setInterval(function () {
       alert("Test");
    }, 5000);

    Das hat NICHTS mit jquery zu tun. (btw, nimm doch den richtigen Code-Block, sprich Javascript anstatt HTML)  
      
    
    > Das funktioniert auch gut. Das Problem ist, das beim ersten mal auch 5-Sekunden dauert bis das Intervall feuert. Gibt es eine Möglichkeit, dass das Intervall beim ersten mal sofort startet und dann 5-Sekunden wartet?  
    
    Klar geht das, ruf die Funktion auf und setze dann das Interval.  
      
    ~~~javascript
      
    var func = function () {  
       alert("Test");  
    };  
    func();  
    var refreshId = setInterval(func, 5000);  
    
    

    MfG
    bubble

    --
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
    1. Hallo,

      danke für die Antwort. So ganz haut das nicht hin. Das Intervall läuft nur einmal durch und dann stoppt es.

        
      var func = function (parameter) {  
         alert("Test");  
      };  
      func(parameter);  
      var refreshId = setInterval(func(parameter), 5000);  
      
      

      Gruß

      1. Hi!

        var refreshId = setInterval(func(parameter), 5000);

        Hier rufst du func auf und übergibst den Rückgabewert des Funktionsaufrufs an setInterval.

        Die Funktion gibt aber nichts zurück. Du willst sie hier nicht ausführen, sondern nur die Funktion (das Funktionsobjekt) übergeben.

        setInterval(func, 5000)

        Wenn du Parameter übergeben willst, so geht das mit einer weiteren Wrapper-Funktion (eine Closure):

        setInterval(function() { func(parameter); }, 5000)

        Oder man nutzt Function Binding bzw. Partial Function Application:

        setInterval(func.bind(undefined, parameter), 5000)

        Das läuft auf dasselbe hinaus.

        Mathias

        1. Hi,

          vielen Dank. Das funktioniert jetzt. Gibt es keine andere Möglichkeit, das Intervall beim ersten auszulassen, außer das, was bereits vorgestellt wurde. Ich meine, zunächts die Funktion einmal aufrufen uns dann das Intervall setzen? Das kommt mir nicht ganz sauber vor.

          Gruß

          1. Hallo,

            vielen Dank. Das funktioniert jetzt. Gibt es keine andere Möglichkeit, das Intervall beim ersten auszulassen

            Du kannst setTimeout verwenden. Das erscheint mir ohnehin sinnvoller, weil du nicht weißt, wie lange der alert-Dialog offen ist. Du willst wahrscheinlich nicht, dass der Intervall weiterläuft, während der Dialog offen ist. Das passiert bei setInterval. Wenn der Dialog 4s offen ist, würde er nach dem Schließen direkt wieder nach 1s geöffnet.

            alert() hält die Ausführung sämtlicher JavaScripte an (zumindest im aktuellen Thread der JS-Engine), aber die Intervalle und Timeouts laufen m.W. weiter. Das sind im Grunde nur Funktionen, deren Ausführung für einen bestimmten Zeitpunkt in der Zukunft terminiert ist.

            Beispiel mit setTimeout:

            var i = 0, handle;  
            var step = function() {  
              i++  
              alert(i);  
              // *Nach* dem Schließen des Alerts: Warte 5s bis zum nächsten Alert  
              handle = setTimeout(step, 5000);  
            };  
            step(); // Starten
            

            Mathias

            1. Hi,

              dnake. Nein das geht nicht um den alert-Dialog. Diesen habe ich als Beispiel angegeben. In der Funktion läuft ein ajax-Jason Aufruf im C#-Umfeld. Die Werte kommen aus einer Datenbank. Ich musste 5-Sekunden warten bis die ersten Werte erschienen. Da Werte, die ich benötige, sich ständig ändern können, aktuallisiere ich alle 5-Sekunden die Ansicht. Daher wollte ich die ersten Werte sofort anzeigen, ohne dafür am Anfang 5-Skunden warten zu müssen.

              Gruß