我正在尝试动态创建一个jQuery UI对话框,其中包含从传递给该函数的数组派生的按钮,然后将所选按钮的键传递给按钮单击时的下一个函数,但到目前为止没有运气。
一个简单的测试用例:
var buttons = {};
for (var o in options) {
buttons[options[o]]=function(){
alert(o);
}
}
按钮的标签是正确的,但是在点击时,alert()始终显示按钮数组中最后一个元素的键。
我尝试了不同的技巧(将o复制到局部变量等),但无济于事。
关于如何实现这一目标的任何想法?
答案 0 :(得分:0)
您的变量o
绑定到foo
循环的范围,这意味着当调用警报时,它会保留分配给它的最后一个值。
当您使用jQuery时,可以使用$.each
来解决此问题:
var buttons = {};
$.each(options, function(i, v) {
buttons[v] = function() {
alert(v);
}
});
v
等同于您自己代码中的options[o]
,但不依赖于循环变量的范围。