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

时间:2021-04-03 18:15:53

标签: javascript jquery jquery-ui

我正在尝试编写一个函数,该函数动态生成一个带有按钮的 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);

但是好像不行。标签工作正常,但回调函数没有引用正确的索引。

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

1 个答案:

答案 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);