我正在尝试编写一个函数,该函数动态生成一个带有按钮的 Dialog 小部件,这些按钮来自标签对列表和作为参数传递给生成函数的回调函数。
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);
但是好像不行。标签工作正常,但回调函数没有引用正确的索引。
有人知道如何解决这个问题,或者知道做同样事情的另一种方法吗?
答案 0 :(得分:0)
好的,我想通了。为了丢失对索引的引用,我不得不使用另一个函数来生成回调函数。
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);