関連する可能性のあるいくつかのことがここで進行しています。
- for ループの構文に明らかな問題はありません。ループ内に追加する
console.log("i: " + i);
と、このコードの実行時にブラウザーの JavaScript コンソールに次の 4 行が書き込まれるはずです。
私: 0
私: 1
私: 2
私: 3
ループが実行されるたびに、次のことがこの順序で発生します。
- 要素 #adBox のアニメーション キューに 5 秒の遅延が追加された後、スライド アップ アニメーションがキューに追加されます。
- これらのアイテムがキューに追加された直後に、遅延またはアニメーションの開始を待たずに、別の遅延と右スライド アニメーションが同じ要素のキューに追加されます。
- 遅延またはアニメーションの実行を待たずに、 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 に渡す無名関数の引数は、コールバック関数です。これらは、各関数が完了した後にのみ実行されます。