1

我正在尝试使用从传递给函数的数组派生的按钮动态创建一个 jQuery UI 对话框,然后在单击按钮时将所选按钮的键传递给下一个函数,但是到目前为止还没有运气。

一个简单的测试用例:

var buttons = {};
for (var o in options) {
  buttons[options[o]]=function(){
    alert(o);
  }
}

按钮的标签是正确的,但是在单击时 alert() 始终显示按钮数组中最后一个元素的键。

我尝试了不同的技巧(将 o 复制到局部变量等),但无济于事。

关于如何实现这一目标的任何想法?

4

1 回答 1

0

您的变量o绑定到foo循环的范围,这意味着当警报被调用时,它会保留分配给它的最后一个值。

当您使用 jQuery 时,您可以使用它$.each来解决这个问题:

var buttons = {};
$.each(options, function(i, v) {
     buttons[v] = function() {
         alert(v);
     }
});

v等效于您自己的options[o]代码,但不受循环变量的范围约束。

于 2013-05-06T08:58:34.163 回答