轉(zhuǎn)帖|其它|編輯:郝浩|2011-10-11 13:34:35.000|閱讀 5799 次
概述:使用JS做DIV彈出層時(shí),一般地在IE下是無法遮罩ActiveX控件的,同時(shí)在IE6下Select也遮罩不住。在IE中ActiveX默認(rèn)永遠(yuǎn)顯示在最頂層,因此通過設(shè)置Style的Z-Index屬性也無法改變遮罩關(guān)系的。在信息系統(tǒng)軟件中,許多場(chǎng)合由于性能、操作等原因,往往會(huì)使用 ActiveX代替Html來完成功能,從而成為不可回避的問題。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
使用JS做DIV彈出層時(shí),一般地在IE下是無法遮罩ActiveX控件的,同時(shí)在IE6下Select也遮罩不住。在IE中ActiveX默認(rèn)永遠(yuǎn)顯示在最頂層,因此通過設(shè)置Style的Z-Index屬性也無法改變遮罩關(guān)系的。在信息系統(tǒng)軟件中,許多場(chǎng)合由于性能、操作等原因,往往會(huì)使用 ActiveX代替Html來完成功能,從而成為不可回避的問題。
1 var sd = XX.style.display;
2 XX.style.display = "none";
3 ...
4 //關(guān)閉彈出層后顯示
5 XX.style.display = sd;
最容易想到的方法是在彈出DIV層前隱藏控件對(duì)應(yīng)的object,關(guān)閉層后再顯示出來。如果只是當(dāng)個(gè)頁面誠然這樣簡(jiǎn)單,但如果存在多個(gè)Iframe嵌套的話,對(duì)于其他Iframe也存在控件的話就比較麻煩。
在IE6以后版本存在稱之為shim的解決辦法,基本思路是這樣的,在當(dāng)前頁面動(dòng)態(tài)創(chuàng)建一個(gè)iframe,其z-index比當(dāng)前的要高,則這個(gè) iframe會(huì)呈現(xiàn)在最上方,然后將彈出的div的z-index設(shè)置比這個(gè)iframe的要高,此時(shí)彈出的div就能遮罩住ActiveX控件了,示意見如下簡(jiǎn)圖(實(shí)際div是與iframe重合的)。
當(dāng)然還需要設(shè)置一些必要地屬性,比較關(guān)鍵是設(shè)置iframe的src屬性為javascript:false;,并設(shè)置display為none,透明度為0。
01 //popDiv是彈出層,nowindex是當(dāng)前的z-index
02 popDiv.style.zIndex=nowindex+1;
03 //加一個(gè)iframe以遮住ActiveX
04 if($get("__iframeBodyCover" + winname )==null){
05 var iframeBodyCover = document.createElement("iframe");
06 iframeBodyCover.id = "__iframeBodyCover"+winname;
07 iframeBodyCover.style.cssText = "position:absolute;top:0;left:0;width:"
+ document.body.clientWidth+ "px; height:" +
document.body.clientHeight + "px;background-color:#000000;
filter:alpha(opacity=0);display:none;";
08 iframeBodyCover.src ="javascript:false;";
09 document.body.appendChild(iframeBodyCover);
10 }
11 //iframe的z-index比div的要低
12 $get("__iframeBodyCover" + winname ).style.zIndex = nowindex;
當(dāng)然這時(shí)候在IE6下自然也能遮罩住select了,方法還是有一點(diǎn)巧妙地,沒有經(jīng)驗(yàn)的可能比較難以想到,不過不知道是不是有更好地方法。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載