2012-07-17 61 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