easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口
弹出窗关闭的时候提示是否关闭,同时进行一些对应的方法调用,
然而在进行页面关闭调用的时候,往往页面关闭了,才弹出确认对话框,
$.messager.confirm和panel的onBeforeClose不兼容性问题.
一.初始代码:
$('#_MoneyExpense_show_dialog').panel({
onBeforeClose:function(title){
$.messager.confirm('提示','确定关闭',function(r){
if(r){
return true;
}else{
return false;
}
})
}})
二.起因分析:
$.messager.confirm为异步方法.在easyui说明中题头已经提到,
Messager(消息窗口)
使用$.messager.defaults重写默认值对象。
消息窗口提供了不同的消息框风格,包含alert(警告框), confirm(确认框), prompt(提示框), progress(进度框)等。所有的消息框都是异步的。用户可以在交互消息之后使用回调函数去处理结果或做一些自己需要处理的事情。
在$.messager.confirm还没有进行返回,即你还没有点击按钮的时候onBeforClose已经接收到了""做为返回值.而且该值被认为true.然后关闭了页面,导致了先关闭页面,再弹窗提醒是否关闭的情况.
三.解决方式:
引入全局变量,对状态进行控制.曲线救国,变异步为两次调用的伪同步方法.
设置全局变量默认为false;当页面要求关闭时,判断全局变量
全局变量为true,设置全局变量为false,关闭页面.
全局变量为false,不关闭页面,打开弹窗
选择确定,设置全局变量为true,再次调用关闭页面的方法.
选择取消.什么都不做.
这样解决,有点浪费效率和资源.没有从根源上解决问题.有更好的方式再进行优化吧!
四.解决代码如下:
var msg = false;//设置全局变量;
$('#_MoneyExpense_show_dialog').panel({
onBeforeClose:function(){
if(msg){//判定全局变量为真;
msg=false;//设置全局变量为false;
return true;//关闭页面;
}else{
$.messager.confirm('提示','确定关闭',function(r){
if(r){//弹窗提示选择为确定;
msg = true;//设置全局变量为真,及关闭页面;
$('#_MoneyExpense_show_dialog').panel('close');
//再次调用关闭页面方法.全局变量为true,则进入弹出窗方法.
}
});
return false;//关闭页面时,全局变量为false,则不进行关闭页面.
}
},
});
五.备注:
因使用easyui不是太多,更多的时候是帮别人解决问题的时候遇到测试的,
以上观点只为个人观点,非最优解决方案,欢迎大神给出更优解决方案,多多交流才有进步;
有新问题请留言,大家一起探讨一起进步;
分类:
前端
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本