2011-01-12 15 views
0

私がしようとしているのは、ロゴのレコードセットを取得することです。 1:ディスプレイ用 2:銀行用fadeOutコールバック関数に値を渡す

私は遅れて10個のロゴを表示します 私はそれらを置き換えます。銀行の次の10と

for (var i=0;i<=10;i+=1){ 
    $("#footerlogo-"+(i+1)).hide().append(DisplayArr[i]).fadeIn(); 
} 


function ReplaceFooterLogos() { 
    var runon = 0; 
    var tempholder = ""; 
    for (var i=0;i<=10;i+=1){ 
     $("#footerlogo-"+(i+1)+"").fadeOut("fast",function(i){ 
      BankArr.push(DisplayArr.shift()); 
      DisplayArr.unshift(BankArr.shift()); 
      $(this).html(DisplayArr[i]).fadeIn() 
     }); 
    } 
    $("#mycarousel").delay(5000,function() { ReplaceFooterLogos() }); 
} 

$("#mycarousel").delay(5000,function() { ReplaceFooterLogos() }); 

遅延機能を無視する - 私はそれを持っている!

私の質問はなぜ私の変数私は未定義ですか?どのようにコールバックに値を渡すのですか?

答えて

2

なぜ私の変数iは未定義ですか?

DisplayArr[i]が未定義であることがわかります。 iは、コールバックが実行されるときに11になるはずです。

あなたは閉鎖(あなたfadeOutコールバックが何であるかである)を作成するとき、それはその時点での変数へ不朽の参照ではなく、変数の値のコピーを持っています。そのため、すべてのコールバックに同じiの値が表示されます。この値は、ループの終了後の値になります(11)。私はDisplayArr[11]がないと思っています。

は、ここではそれを修正することができます方法は次のとおりです(。Closures are not complicatedここ閉鎖についての詳細):

function ReplaceFooterLogos() { 
    var runon = 0; 
    var tempholder = ""; 
    for (var i=0;i<=10;i+=1){ 
     $("#footerlogo-"+(i+1)+"").fadeOut("fast", createCallback(i)); 
    } 
    $("#mycarousel").delay(5000,function() { ReplaceFooterLogos() }); 

    function createCallback(index) { 
     return function(index){ 
      BankArr.push(DisplayArr.shift()); 
      DisplayArr.unshift(BankArr.shift()); 
      $(this).html(DisplayArr[index]).fadeIn(); 
     }; 
    } 
} 

我々は何をすべきかというiよりもそのindex引数を使用して、あなたのfadeOutコールバックを構築するために、工場の機能を使用しています。コールバックはにコールバックを作成したコール(コールバックごとに異なる)のために与えられたindex引数で閉じるため、ループの繰り返しの値を使用します(0 ... 10包括的)。

+0

私はfooterlogoセレクターで$(this)を変更しました。しかし、今問題はフェードアウトが機能していることで、フェードインは動作していません –

関連する問題