我在stats_check()下面有一个函数,它设置和清除函数stats()的计时器。但问题是这个函数每2秒运行一次,如果条件为真,它会设置计时器并启动stats()。但是我想每2秒检查一次,但是每5秒启动一次功能统计()。我怎样才能做到这一点?
$(function stats_check() {
var sections = document.getElementsByTagName("section");
window.setInterval(function() {
for (i=0; i<sections.length; i++) {
if (sections[i].className == "present") {
if (sections[i].id.match(/^stats-.*$/)) {
timer = setInterval(function(){stats()}, 5000);
}
else {
clearInterval(timer);
}
}
}
}, 2000);
});
答案 0 :(得分:1)
你可以这样做:
$(function stats_check(){
var shouldRunTimer = false,
sections = document.getElementsByTagName("section");
window.setInterval(function(){
for(var i=0; i<sections.length; i++) {
if(sections[i].className === "present") {
shouldRunTimer = sections[i].id.match(/^stats-.*$/);
}
}
},2000);
var timer = setInterval(function(){
if(shouldRunTimer)
stats();
}, 5000);
});
function stats(){
console.log("runs stats");
}
正如在这个小提琴中看到的那样:http://jsfiddle.net/D669N/
这是做什么的:
stats
函数运行,否则不允许它stats
功能此外,我对您的代码进行了一些更正:
将var
添加到for循环中的i
。如果你不添加var
,它将进入全局范围,这很糟糕,可能会产生很难调试的错误。
使用===
代替==
来比较className
,因为在这种情况下,它优于==
。
你可以在stackoverflow的其他答案中阅读更多关于这两个最后观察的内容,其中有很多。