热列祝贺:中国共产党第十七次全国代表大会胜利闭幕   颜色主题:   网页游戏 软件下载 软件文章 常用网址 自助友情
 首页程序设计数据库操作系统办公系列WEB开发项目专题网络安全图形图像站点地图友情链接
 您的位置: >首页 >WEB开发 >JavaScript >层遇到select框时
  文章搜索
按名称 按简介
  本类推荐
· 层遇到select框时
· 在网页中控制wmplayer播放器
· JS实现浏览器菜单命令
· 用JScript实现公历到农历的日...
· VML Chart 控件
· javascript版的日期输入控件
· Select的OnChange()事件
· 我也写了个日历控件
· 用Javascript制作一个可自动填...
· JavaScript[对象.属性]集锦之一
  本类排行
· 用Javascript制作一个可自动填...
· VML Chart 控件
· 层遇到select框时
· 在网页中控制wmplayer播放器
· 我也写了个日历控件
· 用JScript实现公历到农历的日...
· 使用回车,移动焦点.
· javascript版的日期输入控件
· Select的OnChange()事件
· JS实现浏览器菜单命令
· JavaScript[对象.属性]集锦之三
· JavaScript[对象.属性]集锦之一
· 文档对象
· JavaScript常用内部对象
· document.execCommand() 解析
· 事件处理
· JavaScript实用的一些技巧
· showModalDialog和showModeles...
· JavaScript[对象.属性]集锦之二
层遇到select框时

当层遇到下拉框时总是挡不了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>

  相关软件
  相关文章
下载帮助 发布软件 自助友情 友情链接 网站导航 广告服务 法律声明 联系我们
六世下载 版权所有 ©2005-2007
本站的数据收集于网络,版权归原作者及出版社所有 如果您觉得侵犯了您的版权请来信告诉我们,我们会尽快删除其内容!
鲁ICP备05050400号