我的页面上有一个<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中。
答案 0 :(得分:7)
答案 1 :(得分: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);
}
答案 2 :(得分:0)
您总是可以根据过滤器值定义新变量,如果设置了过滤器值,请使用while语句省略超时:
if(filter == "whatevs"){
var i=true;
}
function(data){
$("#logEntries").html(data);
while(i!=true){
window.setTimeout("getLogs()",120000);
}
}