彈出窗關閉的時候提示是否關閉,同時進行一些對應的方法調用,
然而在進行頁面關閉調用的時候,往往頁面關閉了,才彈出確認對話框,
$.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不是太多,更多的時候是幫別人解決問題的時候遇到測試的,
以上觀點只為個人觀點,非最優解決方案,歡迎大神給出更優解決方案,多多交流才有進步;
有新問題請留言,大家一起探討一起進步;