问题:当我在函数中声明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的处理程序正在运行。
答案 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);