我有一个ID为play
的按钮。
我希望使用此代码对该按钮进行倒计时。但由于某种原因,我不能让这个工作。
var timeoutTime = 500, seconds = 5;
var countdown = $("#play h4");
for(var i = seconds; i>0; i--)
{
setTimeout(function() {
countdown.text("" + i); },timeoutTime);
timeoutTime += 1000;
}
我尝试了很多东西,我能得到的最好的只是1而不是5 4 3 2 1.使用这段代码,我在按钮上得到0。
有什么问题?
答案 0 :(得分:4)
使用此:
for(var i = seconds; i>0; i--) {
(function(i){
setTimeout(function() {
countdown.text("" + i); }, timeoutTime);
})(i);
timeoutTime += 1000;
}
你的问题是我改变了你总是用i的最后一个值调用,因为你传递给setTimeout的回调是在循环结束后调用的。
经典的解决方案是使用闭包来保持另一个具有所需值的变量(此处具有相同的名称i)。它起作用,因为这是每次迭代的不同函数(变量的范围是全局范围或声明它的函数)。