jQuery UI对话框回调函数中的索引范围



我正在尝试编写一个函数,该函数动态生成一个对话框小部件,其中包含作为参数传递给生成函数的标签和回调函数对列表中的按钮。

function generateDialog(title, message, options) {
var html = '<div id="dialog">' + message + '</div>';
$("#dialog-container").append(html);
var buttons = {}
for (var i = 0; i < options.length; i++) {
buttons[options[i][0]] = options[i][1];
}
$('#dialog').dialog({
title: title,
modal: true,
buttons: buttons
});
$("#dialog").dialog("open");
}

我会称之为这个

options = []
for (var i = 0; i < 10; i++) {
options.push(["Option " + i, function() { alert('Option ' + i + ' was chosen'); }]);
}
generateDialog('Select option', 'Please choose option', options);

但它似乎不起作用。标签工作正常,但回调函数没有引用正确的索引。

有人知道如何解决这个问题,或者知道做同样事情的另一种方法吗?

好吧,我想通了。为了丢失对索引的引用,我不得不使用另一个函数来生成回调函数。

function genFunction(i) {
return function () { alert('Option ' + i + ' was chosen'); };
}
options = []
for (var i = 0; i < 10; i++) {
options.push(["Option " + i, genFunction(i)]);
}
generateDialog('Select option', 'Please choose option', options);

最新更新