1

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

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

これは期待どおりに機能せず、「再帰が多すぎます」というエラーが発生します。
これについて何かアイデアはありますか?

4

4 に答える 4

12

試す

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

ちなみに、setInterval()関数を再帰的に呼び出すのではなく、設定された間隔で関数を繰り返し呼び出す必要があります。setTimeout()

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

function increment(){
    $("#counter").text(parseInt($("#counter").text())+1);            
}  
于 2009-11-24T00:06:51.190 に答える
7

increment()インクリメントの呼び出しであり、それへの参照ではありません。増分が再度呼び出されるように設定しようとすると、実際にはすぐに再度呼び出されます。戻った場合、その戻り値はに渡されsetTimeoutますが、深い再帰エラーが発生するまで何度も何度も呼び出されるため、返されることはありません。

解決策は、単に括弧を削除して、関数のインクリメントを参照しているのであって、それを呼び出さないようにすることです。

于 2009-11-24T00:15:50.127 に答える
3

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

setTimeout()停止基準なしで再帰的に呼び出すことはお勧めしません。スタックは最終的に吹き飛ばされます。使用setInterval()は安全でなければなりません。

于 2009-11-24T00:16:44.787 に答える
0

より簡単な方法:「作成されるとすぐに呼び出され、「何か」が真でない場合は1000ミリ秒間隔で繰り返される関数」

(function(){
    if (something) {
        doSomething();
    } else {
        setTimeout(arguments.callee, 1000);
    }
})();
于 2016-06-14T16:56:31.867 に答える