0

这是我的问题:

var slide;
$$('#slides li').each(function(i, n) {
    slide = i;
    setTimeout("initiateSlide()",n * 500)                     
});
function initiateSlide(){
    i = slide;
    alert(i); // pretty much alerts the last one 5 times
}

我希望initiateSlide()有 5 张不同的幻灯片,但我只得到最后一张 5 次。

4

2 回答 2

2

您的问题是,您在initialSlide() 函数中引用的全局变量(幻灯片)在函数运行时被设置为最后一个。您可能希望使用闭包来维护变量的状态。像这样:

$$('#slides li').each(function(i, n) {
    setTimeout(function() { initiateSlide(i); }, n * 500)
});
function initiateSlide(i){
    alert(i);
}

注意 - 这也完全消除了对全局的需要

于 2010-06-09T04:22:35.460 回答
1

我建议您摆脱全局变量并将循环中的每张幻灯片作为参数传递给您的initiateSlide函数:

$$('#slides li').each(function(slide, n) {
  setTimeout(function () {
    initiateSlide(slide);
  }, n * 500)                     
});

function initiateSlide(slide){
  alert(slide);
}​

在您的示例中,each循环在setTimeout执行任何回调之前结束,您的initiateSlide函数正在使用最后一个迭代元素调用。

于 2010-06-09T04:22:37.713 回答