artDialog是一個相當好用的對話框插件。用法可以參考:http://aui.github.io/artDialog/doc/index.html#api-show
但我使用時遇到了下面的問題:
在列表頁面,針對每一條數據后面有一個設置按鈕,單擊設置按鈕彈出一個設置窗口1。
在設置窗口中有文件上傳的部分,點擊上傳按鈕會使用artDialog彈出一個提示窗口2(提示支持的文件類型,大小等,然后是一個選擇文件的按鈕)。
現在的問題是:在設置窗口1點擊上傳按鈕時,彈出的提示窗口2被1遮住了。
我用的版本是4.1.2。
百度呢,發現它有一個zIndex屬性,不過呢這是一個全局的屬性。也就是說呢,你第一個彈出窗口zIndex設置為99,
那么后面的彈出窗口zIndex都是99.那么首先想到了針對設置窗口1和提示窗口2都設置zIndex。
但僅僅這樣扔有問題。
第一次是成功的。但將子窗口關閉后,再次打開就被遮住了。由於zIndex是一個全局屬性,因此在第一次打開子窗口時已經將zIndex設置為了新的值。
再次打開時父窗口和子窗口的zIndex一樣。父窗口大一些,將子窗口遮住了。
那么,解決辦法就是:在每次打開子窗口時改變zIndex,讓他比父窗口大就行了。
好吧,這樣做了之后暫時沒有什么問題了。
但是,如果頁面有可以input,select之類的,在你點了input,select后發現再點上傳按鈕又不行了!
那我首先對設置窗口頁面的所有input,select加了click事件處理,當click時將zIndex++。
這樣做之后,在你click input,select元素時,再點上傳按鈕沒問題。
但如果你改變了值就又不行了。
所以,在失去焦點時,我將zIndex再次++.這樣終於沒問題了。
相關代碼:
list頁面:
1 function showSettings(obj) { 2 var posno = $(obj).attr("posno"); 3 var smartid = $(obj).attr("smartid"); 4 var index = artindex(); 5 $.get("${ctx}/tsmartpos/posset/"+smartid,{posno:posno,shopid:shopid,ts:(new Date()).getTime()},function(data){ 6 art.dialog({ 7 id:'parentWindow', 8 lock:true, 9 opacity:0.3, 10 title: '終端素材上傳', 11 width: '80%', 12 top:'10%', 13 drag:true, 14 zIndex:index, 15 content: data, 16 esc: true, 17 init:function(){ 18 partdialog = this; 19 } 20 }); 21 }); 22 } 23 24 function closeWin() { 25 partdialog.close(); 26 } 27 function artindex() { 28 return 999; 29 }
設置窗口:
1 var zindex = parent.artindex(); 2 3 //上傳圖片 4 function uploadImg(type){//上傳類型 videourl:視頻 , logourl:logo ,wxcodeurl: 二維碼 5 flag = type; 6 7 $.get("${ctx}/tsmartset/gotouploadpic/"+type ,{ts:(new Date()).getTime()},function(data){ 8 zindex++; 9 console.log('zindex:'+zindex); 10 art.dialog({ 11 id:'imageart', 12 lock:true, 13 opacity:0.3, 14 title: '上傳圖片', 15 width: 470, 16 left: '50%', 17 top: '40%', 18 drag:false, 19 zIndex:zindex, 20 content: data, 21 esc: true, 22 init: function(){ 23 pic_artdialog = this; 24 }, 25 close: function(){ 26 //delpic(type) 27 pic_artdialog = null; 28 $('#face').imgAreaSelect({remove:true}); 29 } 30 }); 31 pic_artdialog.show(); 32 }); 33 } 34 35 $("input").click(function(){ 36 zindex++; 37 }).blur(function(){ 38 zindex++; 39 });