在函数中重置setInterval,范围是全局的。?

时间:2011-07-12 23:16:57

标签: javascript jquery settimeout setinterval

问题:当我在函数中声明clearInterval()/ setInterval()或clearTimeout()/ setTimeout()时,它什么都不做。我必须重置它的原因是用户可以单击以重置计时器。

我尝试了什么:我希望每隔3秒执行一次函数(因此我使用setInterval()与setTimeout()),并在点击时重置该计时器。我已经尝试使用setTimeout()通过使用clearTimeout()&每次执行函数结束时的setTimeout()。结果:执行一次。

以下代码与setInterval相同。结果:它循环而不会重置。

// Declare variables as global
var varTimerSpeed = 3000;
var varTimerInterval;
varTimerInterval = setInterval("someFunction()", varTimerSpeed);

function someFunction() {
  // Reset timer
  clearInterval(varTimerInterval);
  varTimerInterval = setInterval("someFunction()", varTimerSpeed);
}

// Call the function
$(".class").live("click",function() { someFunction(); });

我在someFunction()中正在执行其他正确执行的操作,因此我知道click的处理程序正在运行。

2 个答案:

答案 0 :(得分:5)

如果您希望someFunction以一定间隔运行,但在单击.class元素时将其清除并重置,则不要清除someFunction内的间隔。

只需清除并在点击处理程序中重新启动它。

var varTimerSpeed = 3000;
var varTimerInterval = setInterval(someFunction, varTimerSpeed);

function someFunction() {
  console.log( "someFunction" );
}

$(".class").live("click",function() { 
    clearInterval( varTimerInterval );
    varTimerInterval = setInterval(someFunction, varTimerSpeed);
});

答案 1 :(得分:0)

这个稍微修改过的jsFiddle似乎运行正常:http://jsfiddle.net/jfriend00/GgQBu/

// Declare variables as global
var varTimerSpeed = 3000;
var varTimerInterval = setInterval(someFunction, varTimerSpeed);

function someFunction() {
    // Reset timer
    $("#output").append("...");
    clearInterval(varTimerInterval);
    varTimerInterval = setInterval(someFunction, varTimerSpeed);
}

// Call the function
$(".class").live("click", someFunction);