You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery确认对话框无返回值,无法触发addeditrules函数问题

问题原因

jQuery UI Dialog是异步交互组件,你的代码用同步逻辑获取用户点击结果:confirm = ConfirmDialog(msg) 会在对话框渲染完成后立刻执行,根本等不到用户点击Yes/No按钮,所以confirm变量永远是undefined,自然无法触发后续的addeditrules()调用。

解决方案

改用回调函数处理用户点击结果,把后续执行逻辑交给对话框的按钮事件触发。

修改后的完整代码

$(document).on('click', 'a[id*="editrulesave_"]', function() {
    var id = $(this).data('id');
    var dataSerial = $('#editform_'+id).serialize(); // 补全var声明,避免全局变量污染
    var data = dataSerial + "&type=edit&id="+id;
    var url = "/adminRulesAddeEdit"
    var msg = 'Are you sure you want to save this rule!'

    // 调用确认对话框,传入回调函数处理结果
    ConfirmDialog(msg, function(confirmResult) {
        if (confirmResult === 'yes') {
            addeditrules(url, data);
        }
    });
})

function ConfirmDialog(message, callback) {
    $('<div></div>').appendTo('body')
        .html('<div><h6>' + message + '?</h6></div>')
        .dialog({
            modal: true,
            title: '确认保存', // 修正标题语义,和当前操作匹配
            zIndex: 10000,
            autoOpen: true,
            width: 'auto',
            resizable: false,
            buttons: {
                Yes: function() {
                    $(this).dialog("close");
                    callback('yes'); // 点击Yes时触发回调,传递结果
                },
                No: function() {
                    $(this).dialog("close");
                    callback('no'); // 点击No时触发回调,传递结果
                }
            },
            close: function(event, ui) {
                $(this).remove();
            }
        });
};

关键修改点

  1. 新增回调参数:给ConfirmDialog函数添加callback参数,用于接收用户点击后的处理逻辑
  2. 移除同步赋值判断:不再试图用变量接收对话框返回值,把addeditrules()的调用放在回调函数中
  3. 按钮事件触发回调:在Yes/No按钮的点击事件里,调用传入的callback并传递对应结果字符串
  4. 修复变量声明:给dataSerial添加var声明,避免产生全局变量

内容的提问来源于stack exchange,提问作者Vishal Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:05:27