0

我对 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();
4

1 回答 1

1

这里有几件事可能是相关的:

  • for 循环语法没有明显的问题。如果您console.log("i: " + i);在循环内添加,您应该会在此代码执行时看到四行写入浏览器的 JavaScript 控制台,例如:
我:0
我:1
我:2
我:3
  • 每次循环执行时,都会发生以下事情,顺序如下:

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

  • 最后,关于术语的注释:for 循环是 JavaScript 内置的。它与 jQuery 无关,jQuery 是一个 JavaScript 库。

我怀疑你真正想要发生的事情是这样的:

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);
                });
            });
        });
    }
}

我传递给隐藏、显示和加载的那些匿名函数参数是回调函数。它们只会在每个函数完成后执行。

于 2012-09-04T17:31:31.343 回答