0

ある関数から Jquery ハンドル関数に変数を渡す際に単純な問題があります。最初の関数には、アイテムのリストを処理する for ループがあります。関数は画像を挿入し、onclick() Jquery ハンドルを画像に追加したいと考えています。onclick() は、for ループの indx を渡す関数を呼び出します。値を渡す代わりに参照が渡されるため、すべての onclick ハンドルが同じ値 (for ループの最後の値) になります。コードは次のとおりです。

function setAlbums()

    {
        for(var indx=0;indx<$("li.mainSpPic").length;indx++)
            {
             ....
             $("li.mainSpPic").eq(indx).children("img").eq(0).click(**function(){chngAlbm(indx,albmStrB[1]**);}) ;

    }

では、各 onclick() 関数が一意の値を持つ indx 変数を渡す方法を誰かがアドバイスできますか?

4

1 に答える 1

0

これは、Javascript のクロージャーによるものです。関数が作成されたときの変数 indx の値ではなく、ハンドラ関数が変数 indx にバインドされているため、失敗します。for ステートメントが終了すると、ハンドラー関数が実行されます。

この問題の解決策はこれです。

function setAlbums()
{
    for(var indx=0;indx<$("li.mainSpPic").length;indx++)
    {
         ....
         $("li.mainSpPic").eq(indx).children("img").eq(0).click(function(value) {
                return function() {
                  chngAlbm(value,albmStrB[1]);
                } 
         })(indx) ;
     }
}
于 2013-05-07T18:20:14.970 に答える