2012-07-17 103 views
0

附加事件處理程序我有一個選項對象是這樣的:的JavaScript在每個循環

//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()」 - 所以它看起來總是最後一個。我做錯了什麼?

回答

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))。

+0

耶,是的:-)你是對的,謝謝! – 2012-07-17 13:27:12