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 コンソールに次の 4 行が書き込まれるはずです。
私: 0
私: 1
私: 2
私: 3
  • ループが実行されるたびに、次のことがこの順序で発生します。

    1. 要素 #adBox のアニメーション キューに 5 秒の遅延が追加された後、スライド アップ アニメーションがキューに追加されます。
    2. これらのアイテムがキューに追加された直後に、遅延またはアニメーションの開始を待たずに、別の遅延と右スライド アニメーションが同じ要素のキューに追加されます。
    3. 遅延またはアニメーションの実行を待たずに、 get の呼び出しが行われます"adPage" + i + ".php"。ページが返されると、要素 #adContent に読み込まれます。ただし、.load() メソッドは、ページが取得またはロードされるのを待たずに、すぐに を返します。
  • for ループは、.load() への最初の呼び出しが完了する前に、おそらく 4 回の繰り返しをすべて完了します。

  • 最後に、用語についての注意: 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);
                });
            });
        });
    }
}

hide、show、load に渡す無名関数の引数は、コールバック関数です。これらは、各関数が完了した後にのみ実行されます。

于 2012-09-04T17:31:31.343 に答える