ZhipSoft.com
              冬去春來
                  鄭重聲明:本Blog純屬個人學習、工作需要,記錄相關資料。請不要發(fā)表任何有人身攻擊的言論,謝謝!!www.ZhipSoft.com
          posts - 94,comments - 149,trackbacks - 0

          當層遇到下拉框時總是擋不了select框?其實這是IE的BUG,其它的瀏覽器沒有這個問題,對于這個問題論壇里不少提出,在這里提供我的幾種方法,各有各的好處,有錯,有好的意見者提出,謝謝.

          1.最直接的方法:隱藏下拉框.

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

          test.htm

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

          <script>
          var HideElementTemp = new Array();
          //點擊菜單時,調(diào)用此的函數(shù),菜單對象
          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;//已經(jīng)有的長度
            //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框數(shù)目少,相對固定的話,直接用obj.style.visibility="hidden"這樣進行隱藏是更直接的.

          2.Object對象的優(yōu)先度較高,可以擋住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>

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

           

          3.用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>
          <!--
          提供定位函數(shù),用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="http://www.sohu.com" onmouseover="style.backgroundColor='highlight'" onmouseout="style.backgroundColor=''" onclick="window.open(href)">sohu</div>
          </div>
          </body>
          </html>



                  本Blog純屬個人學習、工作需要,記錄相關資料。請不要發(fā)表任何有人身攻擊的言論,謝謝! www.zhipsoft.cn
          posted on 2007-05-29 14:30 ZhipSoft 閱讀(418) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 荥阳市| 出国| 南康市| 弋阳县| 北安市| 海原县| 健康| 牙克石市| 邛崃市| 新疆| 永安市| 池州市| 揭西县| 烟台市| 江阴市| 历史| 林周县| 新野县| 鞍山市| 曲周县| 浦县| 鹤岗市| 印江| 乐业县| 射阳县| 兰州市| 宿州市| 泸州市| 都安| 常山县| 封丘县| 永和县| 武平县| 陆丰市| 岑巩县| 渝中区| 泸西县| 桑日县| 会理县| 祁阳县| 惠州市|