0

次のようなオプション オブジェクトがあります。

//buttons = html-button elements with id's
buttonTypes: {
"open" : ['#button1', '#button2'], 
"close" : ['#button3', '#button4'] 
} 

ここで、各 の要素にクリック ハンドラーを割り当てたいと思いますbuttonTypes.key。「開く」に関連するボタンは同じ名前の関数を呼び出し、「閉じる」に関連するボタンは閉じると呼ばれる関数を呼び出すため、次のループを記述しました。

for(a in buttonTypes) {
    $(buttonTypes[a]).each(function(i,button){ 
        $(button).click(function(e) {
            that[a]();
        });
    });
}

問題:

ボタンをクリックすると、呼び出される関数は だけなclose()ので、常に最後の関数のようです。私は何を間違っていますか?

4

1 に答える 1

2

that[a]();ボタンをクリックするまで評価されないため。その時点で、それはcloseです。

代わりにすべきことは、のローカル コピーを作成することですa

for (a in buttonTypes) {
    $(buttonTypes[a]).each(function(i,button){
        var type = a;

        $(button).click(function(e) {
            that[type]();
        });
    });
}

var( )も忘れずにfor (var a in buttonTypes)

于 2012-07-17T13:10:53.537 に答える