0

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

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

4

1 回答 1

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

于 2012-07-17T13:10:53.537 回答