0

我有一个滑动图像的功能,我把它分成10个小div,每个div都有一部分图像,然后我使用这个功能:

  function change()
{
    $(document).ready(function(){
        for(var i=1,t=0,s="";i<=10;i++)
        {
        s= "#img2_" + i;
        setTimeout(function(){$(s).slideDown(2000)},t);
        t= t+300;
        }
    });
}

我有一个问题,只有 i=10 的 div 是 slideDown,我试图改变 i 的最大值,只有 i 的 div 是 slideDown。那么我的问题是什么:(

4

1 回答 1

1

到执行超时时,“s”将等于循环结束时分配的值。这是因为传递给 setTimeout 的函数没有它自己对 s 的引用,它使用的是“全局”引用。要解决此问题,请围绕对 setTimeout 的调用创建一个闭包,如下所示:

function change() {
  $(document).ready(function(){
    for(var i=1,t=0,s="";i<=10;i++) {
      s= "#img2_" + i;
      (function(img, delay){
        setTimeout(function(){$(img).slideDown(2000)}, delay);
      })(s, t);
      t= t+300;
    }
  });
}
于 2013-02-18T05:33:10.953 回答