<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    This Is A FineDay

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      93 隨筆 :: 0 文章 :: 69 評論 :: 0 Trackbacks

    select擋住div的5種解決方法
    ?

    在IE中,select屬于window類型控件,它會“擋住”所有非window類型控件
    可以這么理解,div這樣的組件是在瀏覽器客戶區使用代碼“渲染”的,
    他們被渲染在客戶區的繪畫表面上,
    而select是使用的標準windows控件,只是作為客戶區的子控件放置而已,
    它會覆蓋所有客戶區繪畫表面上“畫”出來的一切,但不一定會覆蓋其他類型的window控件,
    比如iframe和其他的select,如果你使用過類似Delphi這樣的環境就會自然理解。IE7解決了此類BUG。

    有多種種辦法;
    1. 修改select,不用標準select,而是自己用其他html元素模擬
    2. 修改你的div,使用iframe。
    3. 在div被顯示的時候或者到達select所在位置時隱藏select
    4. 在div中或div的同一坐標上,用相同尺寸的iframe先遮擋一下,然后在iframe上顯示div的內容。
    5.Object對象的優先度較高,可以擋住select框

    以下例子系網上資源整理

    原址:http://hi.baidu.com/suofang/blog/item/72f2f7ed23f2324e78f055c4.html

    第4種方法的例子:最好的方法:iframe來當作div的底

    Div被Select擋住,是一個比較常見的問題。???
    ????? 有的朋友通過把div的內容放入iframe或object里來解決。???
    ????? 可惜這樣會破壞頁面的結構,互動性不大好。???
    ????
    ????? 這里采用的方法是:???
    ????
    ????? 雖說div直接蓋不住select???
    ????? 但是div可以蓋iframe,而iframe可以蓋select,???
    ????? 所以,把一個iframe來當作div的底,???
    ????? 這個div就可以蓋住select了.???


    <html>
    <head>
    <script>
    function DivSetVisible(state)
    {
    var DivRef = document.getElementById('PopupDiv');
    var IfrRef = document.getElementById('DivShim');
    if(state)
    {
    DivRef.style.display = "block";
    IfrRef.style.width = DivRef.offsetWidth;
    IfrRef.style.height = DivRef.offsetHeight;
    IfrRef.style.top = DivRef.style.top;
    IfrRef.style.left = DivRef.style.left;
    IfrRef.style.zIndex = DivRef.style.zIndex - 1;
    IfrRef.style.display = "block";
    }
    else
    {
    DivRef.style.display = "none";
    IfrRef.style.display = "none";
    }
    }
    </script>
    </head>
    <body>
    <form>
    <select>
    <option>A Select Box is Born ....</option>
    </select>
    </form>
    <div id="PopupDiv" style="position:absolute; top:25px; left:50px; padding:4px; display:none; background-color:#000000; color:#ffffff; z-index:100">
    .... and a DIV can cover it up<br/>through the help of an IFRAME.
    </div>
    <iframe id="DivShim" src="javascript:false;" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;">
    </iframe>
    <br/>
    <br/>
    <a href="#" onclick="DivSetVisible(true)">Click to show DIV.</a>
    <br/>
    <br/>
    <a href="#" onclick="DivSetVisible(false)">Click to hide DIV.</a>
    </body>
    </html>

    第3種方法的例子:最直接的方法:隱藏下拉框.

    下面提供的是一個比較通用的一組函數:

    test.htm

    ------------

    <script>
    var HideElementTemp = new Array();
    //點擊菜單時,調用此的函數,菜單對象
    function cal_hideElementAll(obj){
    ??????????? cal_HideElement("IMG",obj);
    ??????????? cal_HideElement("SELECT",obj);
    ??????????? cal_HideElement("OBJECT",obj);
    ??????????? cal_HideElement("IFRAME",obj);
    }
    function cal_HideElement(strElementTagName,obj){
    try{
    ??????? var showDivElement = obj;
    ??????? var calendarDiv = obj;
    ??????? var intDivLeft = cal_GetOffsetLeft(showDivElement);
    ??????? var intDivTop = cal_GetOffsetTop(showDivElement);//+showDivElement.offsetHeight;
    ??????? //HideElementTemp=new Array()
    ??????? for(i=0;i<window.document.all.tags(strElementTagName).length; i++){
    var objTemp = window.document.all.tags(strElementTagName)[i];
    if(!objTemp||!objTemp.offsetParent)
    ???????? continue;
    var intObjLeft=cal_GetOffsetLeft(objTemp);
    var intObjTop=cal_GetOffsetTop(objTemp);
    if(((intObjLeft+objTemp.clientWidth)>intDivLeft)&&
    ??????? (intObjLeft<intDivLeft+calendarDiv.style.posWidth)&&
    ??????? (intObjTop+objTemp.clientHeight>intDivTop)&&
    ??????? (intObjTop<intDivTop+calendarDiv.style.posHeight)){
    ???????? //var intTempIndex=HideElementTemp.length;//已經有的長度
    ????? //save elementTagName is stutas
    ???????? //HideElementTemp[intTempIndex]=new Array(objTemp,objTemp.style.visibility);
    ???????? HideElementTemp[HideElementTemp.length]=objTemp
    ???????? objTemp.style.visibility="hidden";
    ??????????? }
    ??????? }
    }catch(e){alert(e.message)
    }
    }

    function cal_ShowElement(){
    ??????? var i;
    ??????? for(i=0;i<HideElementTemp.length; i++){
    var objTemp = HideElementTemp[i]
    if(!objTemp||!objTemp.offsetParent)
    ???????? continue;
    objTemp.style.visibility=''
    ??????? }
    ??????? HideElementTemp=new Array();
    }
    function cal_GetOffsetLeft(src){
    ??????? var set=0;
    ??????? if(src && src.name!="divMain"){
    ??????????? if (src.offsetParent){
    ?????????????? set+=src.offsetLeft+cal_GetOffsetLeft(src.offsetParent);
    }
    if(src.tagName.toUpperCase()!="BODY"){
    ???????? var x=parseInt(src.scrollLeft,10);
    ???????? if(!isNaN(x))
    ??????????????? set-=x;
    }
    ??????? }
    ??????? return set;
    }

    function cal_GetOffsetTop(src){
    ??????? var set=0;
    ??????? if(src && src.name!="divMain"){
    ??????????? if (src.offsetParent){
    ??????????????? set+=src.offsetTop+cal_GetOffsetTop(src.offsetParent);
    ?????? }
    if(src.tagName.toUpperCase()!="BODY"){
    ???????? var y=parseInt(src.scrollTop,10);
    ???????? if(!isNaN(y))
    ????? set-=y;
    }
    ??????? }
    ??????? return set;
    }

    </script>
    <select></select>
    <select></select>
    <div style="position:absolute;left:0;top:0;width:100;height:100;background-color:red" onclick="cal_hideElementAll(this)">
    點擊讓select隱藏
    </div>
    <br><br><br><br><br><br>
    <input type="button" value="點擊讓select顯示" onclick="cal_ShowElement()">

    以上這種方法,如果對于select框數目少,相對固定的話,直接用obj.style.visibility="hidden"這樣進行隱藏是更直接的.

    第2種方法:用iframe作載體

    以下是一簡單的例子:

    -----------

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <title>簡單菜單</title>
    <!--
    提供定位函數,用iframe作載體,不會被select擋住
    By Fason(2003-5-21)
    -->
    <style id=s>
    #div1{
    position:absolute;
    z-index:100;
    width:100;
    height:130;
    background-color:#d2e8ff;
    border:1 solid black;
    }
    div{cursor:hand;font-size:12px;}
    a{text-decoration:none;color:red;font-size:12px}
    </style>
    </head>
    <body>
    <script>
    function window.onload(){
    var shtml=div1.innerHTML;
    var ifm=document.createElement("<iframe frameborder=0 marginheight=0 marginwidth=0 hspace=0 vspace=0 scrolling=no></iframe>")
    ifm.style.width=div1.offsetWidth
    ifm.style.height=div1.offsetHeight
    ifm.name=ifm.uniqueID
    div1.innerHTML=""
    div1.appendChild(ifm)
    window.frames[ifm.name].document.write(s.outerHTML+"<body leftmargin=0 topmargin=0>"+shtml+"</body>")
    }

    function show(){
    with(document.all.img1){
    x=offsetLeft;
    y=offsetTop;
    objParent=offsetParent;
    while(objParent.tagName.toUpperCase()!= "BODY"){
    x+=objParent.offsetLeft;
    y+=objParent.offsetTop;
    objParent = objParent.offsetParent;
    }
    y+=offsetHeight-1
    }
    with(document.all.div1.style){
    pixelLeft=x
    pixelTop=y
    visibility=''
    }
    }
    function hide(){
    document.all.div1.style.visibility='hidden'
    }
    </script>
    <img id=img1 onmouseover="show()" onmouseout="hide()" src="ie.gif"><br><select></select>
    <div id=div1 onmouseover="style.visibility=''" onmouseout="style.visibility='hidden'" style="visibility:hidden;">
    <div href="http://www.csdn.net" onmouseover="style.backgroundColor='highlight'" onmouseout="style.backgroundColor=''" onclick="window.open(href)">中國程序員</div>
    <div href="</div>
    </body>
    </html>

    第5種方法:Object對象的優先度較高,可以擋住select框

    <OBJECT id=aa style="display:none;z-index:1000; position:absolute; top:0; left:0; width:152; height: 200;" type="text/x-scriptlet" data="about:<body><div style='position:absolute;left:0;top:0;width:152;height:200;font:14;color:white;background:black;border:1 solid black'>test</div>"></OBJECT>
    <select><option>hellohellohellohello</select><button onclick=aa.style.display=aa.style.display=="none"?"":"none">test</button>

    這種方法雖然也簡單,但對復雜的層是來說還不是好的解決方法.

    posted on 2007-08-07 13:53 Peter Pan 閱讀(9321) 評論(0)  編輯  收藏 所屬分類: JS
    主站蜘蛛池模板: 亚洲欧洲国产精品香蕉网| 久久亚洲AV成人出白浆无码国产| JLZZJLZZ亚洲乱熟无码| 亚洲色图黄色小说| 在线观看免费黄色网址| 天天操夜夜操免费视频| 亚洲av永久无码精品古装片| 国产亚洲成在线播放va| 永久免费视频网站在线观看| 亚洲精品国产精品乱码不卡| 爱情岛论坛亚洲品质自拍视频网站| 最近中文字幕2019高清免费| 亚洲午夜无码久久久久| 国国内清清草原免费视频99 | 国产国拍亚洲精品福利 | 一级毛片在线免费看| 亚洲?v女人的天堂在线观看| 亚洲丰满熟女一区二区哦| 日本zzzzwww大片免费| 亚洲欧洲视频在线观看| 91精品全国免费观看含羞草| 亚洲精品无码专区久久| 毛片免费视频播放| 亚洲va久久久噜噜噜久久男同| 成年性生交大片免费看| 在线成人精品国产区免费| 亚洲尤码不卡AV麻豆| 999在线视频精品免费播放观看| 亚洲午夜在线一区| 日韩在线免费视频| 国产免费一区二区三区不卡| 亚洲av成人片在线观看| 少妇亚洲免费精品| 国产一卡2卡3卡4卡无卡免费视频| 久久久久久噜噜精品免费直播| 伊人久久大香线蕉亚洲五月天| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲AV无码专区国产乱码不卡| 97亚洲熟妇自偷自拍另类图片| 亚洲欧洲精品成人久久曰影片| 999在线视频精品免费播放观看|