2

<div>更新されたログエントリで2分ごとに自動的に更新されるページがあります。Webページを最初にロードするときに、次の関数を呼び出します。

function getLogs() {
    var filter = $('#filter').val();
    $.get("index-ajax.asp", { queryType: "getLogs", filter: filter, 
        uTime: new Date().getTime() },

        function(data){
            $("#logEntries").html(data);
            window.setTimeout("getLogs()",120000);
    });
}

私は上記のコードがよりクリーンになる可能性があることを知っていますがwindow.setInterval(...);、私はのコントロールが好きですwindow.setTimeout(...);

私の質問ですが、次のタイムアウト実行をキャンセルすることは可能ですか?フィルタを変更した場合は、次のタイムアウトをキャンセルして、すぐに関数を呼び出します。これにより、タイムアウト関数が再スケジュールされます。その結果を達成するためのより良い方法はありますか?

上記のコードはjQueryにあることに注意してください。

4

3 に答える 3

8

はい、clearTimeoutを使用します。

元:

var clr = window.setTimeout(getLogs,120000);

あなたがそれをクリアしたいとき:

clearTimeout(clr);
于 2012-09-24T18:31:53.560 に答える
3

setTimeouttimerIDに渡すことができるを返しますclearTimeout

// Note we are passing the *function* rather than a string
// Also note the lack of () - we are *not* calling the function
// setTimeout will do that for us
var timerID = setTimeout(getLogs, 120000);
// Fake condition - we cancel the timer if the timerID is even
if (timerID % 2 === 0) {
    clearTimeout(timerID);
}
于 2012-09-24T18:33:09.850 に答える
0

フィルタ値に基づいて新しい変数をいつでも定義できます。そのフィルタ値が設定されている場合は、whileステートメントを使用してタイムアウトを省略します。

if(filter == "whatevs"){
    var i=true;
}
function(data){
    $("#logEntries").html(data);
    while(i!=true){
        window.setTimeout("getLogs()",120000);
    }
}
于 2012-09-24T18:37:11.343 に答える