2012-09-04 144 views
0

我有一个在jQuery for循环的问题。我正在尝试构建一个广告部分,该部分可以动态轮换到最后一个广告。jquery for循环显示隐藏元素

不幸的是,jQuery为我的增量器提供了一个静态值。

这里是我的代码

function ads(){ 

    var i = 0; 

    for(i=0; i<=3; i++){  
     $("#adBox").delay(5000).hide("slide", { direction: "up" }, 1000);  
     $("#adBox").delay(1000).show("slide", { direction: "right" }, 1000);  
     $("#adContent").load("adPage" +i+".php"); 
    } 
}  
ads(); 
+1

1.您的意思是“我的增量器的静态值”是什么意思? 2.你的问题是什么? – dgvid

+0

它只是加载ads1.php或ads3.php,它不循环算术顺序 –

回答

1

有几件事情会在这里,可能是相关的:

  • 没有什么明显错误的for循环语法。如果添加console.log("i: " + i);内循环,可以看到写入到浏览器的JavaScript控制台四行代码执行时,如:
 
i: 0 
i: 1 
i: 2 
i: 3 
  • 每次循环执行,下面的事情会发生,按以下顺序:

    1. 将延迟5秒添加到元素#adBox的动画队列中,然后将向上滑动动画添加到队列中。
    2. 在将这些项目添加到队列后,不等待延迟或动画开始,立即将另一个延迟和幻灯片右侧动画添加到同一元素的队列中。
    3. 无需等待任何延迟或动画执行,拨打"adPage" + i + ".php"即可拨打电话。一旦返回页面,它将被加载到元素#adContent中。但是.load()方法立即返回,无需等待页面被检索或加载。
  • 在首次调用.load()完成之前,for循环可能会完成所有四次迭代。

  • 最后,关于术语的说明:for循环是JavaScript内置的。它与JavaScript库jQuery无关。

我怀疑你真的要发生什么事情是这样的:

function ads(i) { 
    if (i <= 3) { 
     $("#adBox").delay(5000).hide("slide", { direction: "up" }, 1000, function() { 
      $("#adBox").delay(1000).show("slide", { direction: "right" }, 1000, function() { 
       $("#adContent").load("adPage" + i +".php", function() { 
        ads(i + 1); 
       }); 
      }); 
     }); 
    } 
} 

那些匿名函数的参数,我传递给隐藏,显示和负载回调函数。只有在每个功能完成后才会执行它们。

+0

非常感谢你dgvid为你的immidiate和准确的响应! –