我在stats_check()下面有函数,该函数设置并清除函数stats()的计时器。但是问题在于该函数每2秒运行一次,如果条件为真,它将设置计时器并启动stats()。但是我想每2秒检查一次,但是仅每5秒启动一次功能stats()。我怎样才能做到这一点?
$(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);
});
您可以这样做:
$(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
到i
for循环中。如果不添加var
,它将进入全局范围,这很糟糕,并且可能会产生难以调试的错误。
用来===
代替==
比较className
,因为在这种情况下,它比好==
。
您可以在关于stackoverflow的其他答案中了解有关最后2个观察值的更多信息,其中有很多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句