我有一个像这样的选项对象:
//buttons = html-button elements with id's
buttonTypes: {
"open" : ['#button1', '#button2'],
"close" : ['#button3', '#button4']
}
现在我想为每个buttonTypes.key中的元素分配点击处理程序。 与“打开”相关的按钮应调用具有相同名称的函数 与“close”相关的那些应该调用一个名为close的函数 所以我写了这个循环:
for(a in buttonTypes) {
$(buttonTypes[a]).each(function(i,button){
$(button).click(function(e) {
that[a]();
});
});
}
问题:
当我点击按钮时,唯一被调用的函数是“close()” - 所以它似乎总是最后一个。我做错了什么?
答案 0 :(得分: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
a(for (var a in buttonTypes)
)。