javascript在每个循环中附加eventhandler

时间:2012-07-17 13:06:49

标签: jquery object javascript-events event-handling each

我有一个像这样的选项对象:

//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()” - 所以它似乎总是最后一个。我做错了什么?

1 个答案:

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