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

Posted

技术标签:

【中文标题】jQuery UI 对话框回调函数中的索引范围【英文标题】:Scope of index in jQuery UI dialog callback function 【发布时间】:2021-06-30 05:15:49 【问题描述】:

我正在尝试编写一个函数,该函数可以动态生成一个 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】:

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

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

【讨论】:

以上是关于jQuery UI 对话框回调函数中的索引范围的主要内容,如果未能解决你的问题,请参考以下文章

延迟jquery ui对话框关闭,直到回调完成

一个简单的jQuery回调函数例子

Jquery - 追加后执行回调

javascript与jQuery的each,map回调函数参数顺序问题

使用 jquery 警报对话框插件,如何将表单中的值发送到回调功能?表格在警报中

如何在 jQuery UI 对话框中更新“标题”? [复制]