jQuery在每个循环中附加事件处理程序



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

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

相关内容

  • 没有找到相关文章

最新更新