博客 | 彩信 | 影视 | 两性 | 笑话 | 文学 | QQ酷 | 游戏 | 动漫 | 健康 | 人才 | 星座 | 心理 | 网摘 | 图库 | 下载 | 旅游 | 交友 |
社会百态 | 美图写真 | 精彩网文 | 动漫卡通 | 搞笑猎奇 | 历史军事 | 文化旅游 | 明星娱乐 | 两性话题 | 恐怖灵异 | FLASH小游戏 |
您的位置:首页>技术开发>Script>正文
 

层遇到select框时

时间:2006-5-28 17:28:39 | 来自:网络收集 | 浏览:收藏到新浪ViVi 收藏到365KEY

层遇到select框时

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="/Files/BeyondPic/2006-5/28/0652817283830758.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>




打印
上一篇:网站流量统计代码 下一篇:用Javascript写的一个映射表(MAP)类 

版权申明:
  本站属于54stu个人网站,大部分文章来自网络搜集,大家可以自由转载本站的文章,但原作者和来自我站的链接必须保留。文章版权归原作者所有。
  五四电脑技术资讯网(54stu.com)依法保护知识产权,如果我们的文章有涉及或侵犯您的有关权益,请即时与我们联系,注明网址及文章,我们会即时处理或删除,感谢您的合作!

站点最新

·菜鸟手册 诺基亚手机日常问题解答
·如何防范手机被蓝牙病毒“咬”伤
·蓝牙适配器的具体安装及使用方法
·06月22日值得注意病毒列表
·Work 2.0时代,服务决定一切
·06月21日值得注意病毒列表
·紫光华宇拼音输入法5.0版正式发布
·微软即付即用计划:无奈还是阴谋
·期盼:微软正在开发Windows XP S
·9991阴魂不散!多多QQ表情病毒奥
·隐藏文档索财 国内截获首例敲诈病
·没有防火墙的安全 是明智还是愚蠢
·SoBus公交搜宝让您成为公交通(上
·SoBus公交搜宝让您成为公交通(下
·既然有妙笔,干嘛你不来?——纽
·病毒伪装成世界杯球票 已出现多个
·让P2P穿透防火墙:微软再推两新服
·中望CAD2006发布会在广州成功举行
·笔记本的噩耗:Vista将是电量杀手
·江苏省软件产品检测中心对浩辰IC
·腾讯将于6月15日推出QQ会员等级体
·可标记文章已读:IE7 Beta3八月推
·电脑病毒“班沃母”现身为世界杯
·全球最大BT网站即将重新开张!
·微软杀毒新贵Live OneCare正式发
·全球最大BT下载网站遭警方突袭
·病毒借达芬奇密码作乱 教您如何防
·找客户--为您找到新客户,开拓新财
·腾讯公司关于“QQ密码修改方式”
·专业助手!Excel 2007 beta 2 试用

站点推荐

Adobe Premiere 6.0认证考试大纲
网络工程师专业术语大集合之路由

支持我们
 
五四娱乐网--新五四,新娱乐!-WwW.54stu.com 用心生活-娱乐万家(本站法律顾问:陈律师)
五四娱乐网版权所有 All Rights Reserved 蜀ICP备05025894号  投诉QQ:3458124