Frage

Ich versuche, einen Wert in jeder Sekunde auf der Clientseite zu erhöhen, mit jquery
das ist, was tat:

<script type="text/javascript">
        $(document).ready(function increment(){
            $("#counter").text(parseInt($("#counter").text())+1);
            setTimeout(increment(),1000)
        })
    </script>

nicht wie erwartet funktioniert und ich ein „zu viel Rekursion“ Fehler.
irgendwelche Ideen dazu?

War es hilfreich?

Lösung

Versuchen

$(document).ready(function () {       
    function increment(){
        $("#counter").text(parseInt($("#counter").text())+1);
        setTimeout(increment,1000);
    };            
    increment();
});

Übrigens gibt es setInterval() Aufruf eine Funktion wiederholt auf eine eingestellten Intervall, rathering als rekursiv eine Funktion mit setTimeout() Aufruf

$(document).ready(function () {       
    var interval = setInterval(increment,1000);     
});

function increment(){
    $("#counter").text(parseInt($("#counter").text())+1);            
}  

Andere Tipps

increment() ist ein Anruf zu erhöhen, kein Hinweis auf sie. Wenn Sie versuchen, es für Schritt einzurichten, um wieder aufgerufen werden, sind Sie eigentlich nannte es sofort wieder. Wenn es jemals zurückkehrte, seine Rückgabewert würde setTimeout weitergegeben werden, aber es wird nie, weil sie sich einfach ruft immer wieder, bis Sie einen tiefen Rekursionsfehlers erhalten.

Die Lösung ist einfach die Klammern zu entfernen, so dass Sie Referenzierung die Funktion Schritt, und nennt es nicht.

setTimeout(increment, 1000) sollte die richtige Syntax, da Sie einen Verweis auf eine Funktion sind vorbei.

Recursively Aufruf setTimeout() ohne ein Abbruchkriterium wird nicht empfohlen. Der Stapel wird die Luft sprengt schließlich. Mit setInterval() sollte sicher sein.

Eine einfachere Art und Weise: „Eine Funktion, die, sobald erstellt und Wiederholungen innerhalb 1000 ms Intervalle aufgerufen, wenn‚etwas‘nicht wahr ist“

(function(){
    if (something) {
        doSomething();
    } else {
        setTimeout(arguments.callee, 1000);
    }
})();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top