2

我的页面上有一个<div>更新的日志条目每两分钟自动刷新一次。当我第一次加载我的网页时,我调用了以下函数。

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

setTimeout返回一个timerID你可以传递给的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 回答