質問

私はjqueryの
で値をクライアント側で毎秒をインクリメントしようとしています これが何をしたかである:

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

これは期待通りに動作していないと私は「あまりにも多くの再帰」エラーが発生します。
この上の任意のアイデア?

役に立ちましたか?

解決

試してみてください
$(document).ready(function () {       
    function increment(){
        $("#counter").text(parseInt($("#counter").text())+1);
        setTimeout(increment,1000);
    };            
    increment();
});
ところで、 setInterval() にはAで繰り返し関数を呼び出すにあり再帰的setTimeout()

で関数を呼び出すより設定された間隔、rathering
$(document).ready(function () {       
    var interval = setInterval(increment,1000);     
});

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

他のヒント

increment()は増分ではなく、それを基準に、の呼び出しのです。あなたが再び呼ばれるように増分のためにそれを設定しようとしているとき、あなたは実際にすぐに再びそれを呼んでいます。それは今までに返された場合は、そのの戻り値は深い再帰エラーが出るまで、それは単に何度も何度も自分自身を呼び出すため。

setTimeoutに渡されるが、それは決して

ソリューションは、機能の増分だからね、の参照のことを、かっこを削除するだけで、かつます。

それを呼び出していません

setTimeout(increment, 1000)、関数への参照を渡しているので、右の構文である必要があります。

停止基準なしsetTimeout()を呼び出す

再帰的にはお勧めしません。スタックは、最終的に爆破します。 setInterval()を使用することで、安全でなければなりません。

簡単な方法:

「1000ミリ秒間隔内に作成し、繰り返しのように 『何かが』ではない真である場合はすぐに呼び出される関数」
(function(){
    if (something) {
        doSomething();
    } else {
        setTimeout(arguments.callee, 1000);
    }
})();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top