問題:
公司項目最近在用easyui寫后台管理系統,發現dialog使用后總會報出莫名奇妙的問題
1.打開多次后數據顯示上一次的,表單提交錯誤或者獲取數據錯誤
2.來回跳轉后,會有打開其它dialog的可能,神奇的串台現象
排查:
既然打開dialog為上一次的,那么表明【瀏覽器加載了多個同id對象,導致瀏覽器解析加載錯誤】
那么,只要保證瀏覽器存在唯一的對象就能解決這個問題
解決方案:
1.新建一個變量,保存dialog對象,無論那個使用都操作該變量
結果:經實驗,只要調用$('#id').dialog({...}); 就會構造一個新的dialog對象,開啟關閉都要用,多次調用還是會產生多個對象
網上說該方案可行,我試了試,沒啥效果,得大家試了,試好了,麻煩給我留言
2.打開dialog后,添加關閉事件,執行destroy方法,保證每次打開都是新的
結果:如果dialog綁定了頁面的div,那么打開一次后,再也打不開了,猜想可能是連着這個div的dom對象一次玉石俱焚了。。。。慘!
可行的解決方案:
js追加dom元素,保證每次打開都追加一個dom對象讓他去毀,以下是代碼
應該也可以不聲明,直接寫,在里邊添加關閉銷毀事件
//注意:我用的時候是先聲明了該變量,指定固定屬性
var dataFile_Dg = $('<div></div>').dialog({ title: '文本文件上報監控詳情', width: 1000, height: 600, closed: true, cache: false, modal: true, onClose: function () { $(this).dialog('destroy',true); } });
//在使用該變量的時候,要把固定屬性重寫一遍,否則打開一次小一次,最后就留個按鈕了,請慎重!!! //詳情頁 function forwardToDataFileMonitor(bankId) { // alert("詳情"); dataFile_Dg.dialog({ title: '文本文件上報監控詳情', width: 1000, height: 600, closed: true, cache: false, modal: true, href: 'report/static/html/dataFileMonitor/dataFileMonitor.html', queryParams:{ Authorization: localStorage.token, bankId: bankId, reportDate: $('#reportDate').datebox('getValue') }, }); dataFile_Dg.dialog('open'); }
補充建議:對話框加id
$('<div></div>').dialog({ id: 'uniqId', //插入該id,作為方法內變量,訪問加該id即可
title: '文本文件上報監控詳情', width: 1000, height: 600, closed: true, cache: false, modal: true, href: 'report/static/html/dataFileMonitor/dataFileMonitor.html', queryParams:{ Authorization: localStorage.token, bankId: bankId, reportDate: $('#reportDate').datebox('getValue') }, }); $("#uniqId").dialog('open');