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