CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

请教:如何让层的内容显示在下拉列表上面。在线等。。。。

楼主zxhtgh(朱能文)2005-03-02 18:16:32 在 Web 开发 / JavaScript 提问

见如下一段html代码,我想让层与下拉列表重叠放置,让层内容显示在下拉列表上面,不要让下拉列表遮住层的内容,可是不行,请有哪一位高手帮助一下。  
  <body>  
  <form   method="POST"   action="--WEBBOT-SELF--">  
       
      <p>&nbsp;    
      <p>    
          <select   name="select"   size="2">  
          </select>  
  </form>  
   
  <div   style="position:   absolute;   left=50;top=45;   left:   106px;   top:   37px;   z-index:   1;   width:   101px;   height:   40px;">中国</div>  
  </body>  
  问题点数:0、回复次数:3Top

1 楼ttkkyy()回复于 2005-03-02 20:06:36 得分 0

当层遇到下拉框时总是挡不了select框?其实这是IE的BUG,其它的浏览器没有这个问题,对于这个问题论坛里不少提出,在这里提供我的几种方法,各有各的好处,有错,有好的意见者提出,谢谢.  
   
  1.最直接的方法:隐藏下拉框.  
   
  下面提供的是一个比较通用的一组函数:  
   
  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.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>  
   
  这种方法虽然也简单,但对复杂的层是来说还不是好的解决方法  
   
     
   
  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>  
  <!--  
  提供定位函数,用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>  
   
  Top

2 楼sunfic(菜菜龙)回复于 2005-03-03 09:42:03 得分 0

这个与元素的优先级有关系,只要在层上使用优先级比<select>高的就可以了,例如:  
   
  1.  
  <div><iframe></iframe></div>  
   
  2.  
   
  <div><object></object></div>Top

3 楼sunfic(菜菜龙)回复于 2005-03-03 09:43:59 得分 0

你的这个可以使用<object>  
   
  2.  
   
  <div><object><a>中国</a></object></div>  
  Top

相关问题

  • jsp列表显示数据内容!!
  • 请教:如何让层的内容显示在下拉列表上面。在线等。。。。
  • 显示列表
  • 为什么我的下拉列表框不显示内容呢 ?
  • 下拉列表框怎么不显示内容?
  • 显示类列表
  • 高手入内:如何让ComBox下拉列表中的内容完全显示?
  • 求教:根据下拉列表值来动态显示后面内容
  • 对话框中用列表控件显示文本文件的内容?
  • ddlb控件随输入字体自动显示下拉列表框中内容

关键词

得分解答快速导航

  • 帖主:zxhtgh

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo