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(); } }); };
关键修改点
- 新增回调参数:给
ConfirmDialog函数添加callback参数,用于接收用户点击后的处理逻辑 - 移除同步赋值判断:不再试图用变量接收对话框返回值,把
addeditrules()的调用放在回调函数中 - 按钮事件触发回调:在Yes/No按钮的点击事件里,调用传入的
callback并传递对应结果字符串 - 修复变量声明:给
dataSerial添加var声明,避免产生全局变量
内容的提问来源于stack exchange,提问作者Vishal Patel
相关产品推荐
相关产品推荐

