我在Javascript中有一个像这样运行的递归类型函数:
function loadThumb(thumb) {
rotate=setTimeout(function() {
loadThumb(next);
}, delay);
}
注意:我简化了功能,使其更易于阅读。
我有这样的“a”标签
<a href="#" onclick="loadThumb(3); clearTimeout(rotate);">Load thumb 3</a>
但是,它们不会清除计时器,无论调用的
clearTimeout()
如何,计时器都会继续在函数中循环。有什么想法吗?我认为这可能与范围问题或类似问题有关。
最佳答案
是的,您需要旋转一个全局变量。只需在函数外部声明即可,如下所示:
var rotate;
var delay = 1000;
function loadThumb(thumb) {
alert("loading thumb: " + thumb);
rotate = setTimeout(function() {
loadThumb(thumb + 1);
}, delay);
}
另外,在调用
loadThumb
之前,您需要确保清除超时。否则,您将清除刚刚启动的计时器。<a href="#" onclick="clearTimeout(rotate); loadThumb(3);">Load thumb 3</a>
fiddle :http://jsfiddle.net/63FUD/