让层遮挡select(ie6下的问题)

虽然现在很多比较大的网站已经不考虑ie6了,不过这些方法,或者其中原理还是值得记录下来的。所以整理的时候,把这篇文章留下了。

<script language="javascript">

var ie55up =
IsIE55Up();
var overIframe = null;

function
DivOver(objID)
{
var obj =
document.all[objID];
//
只有IE5.5以上Iframe的z-index才有效
if
(ie55up)
{
if (overIframe ==
null)
{
overIframe =
document.createElement("<iframe src=‘about:blank‘
style=‘position:absolute;left:0;top:0;z-index:998;display:none‘ scrolling=‘no‘
frameborder=‘0‘></iframe>");
}
document.body.insertAdjacentElement("beforeEnd",overIframe);
with(overIframe.style)
{
top
= obj.style.top;
left = obj.style.left;
width =
obj.offsetWidth;
height =
obj.offsetHeight;
display =
‘block‘;
}
obj.style.zIndex =
"999";
}
else //
隐藏被ID为objID的对象(层)遮挡的所有select
{
var sels =
document.getElementsByTagName_r(‘select‘);
for (var i = 0; i
< sels.length; i++)
  if
(Obj1OverObj2(document.all[objID], sels))
sels.style.visibility
=
‘hidden‘;          
}
}

//判断obj1是否遮挡了obj2
function
Obj1OverObj2(obj1,
obj2)
{
  var
pos1 =
getPosition(obj1)
  var pos2
= getPosition(obj2)
  var
result = true;
  var
obj1Left = pos1.left -
window.document.body.scrollLeft;
  var
obj1Top = pos1.top -
window.document.body.scrollTop;
  var
obj1Right = obj1Left +
obj1.offsetWidth;
  var
obj1Bottom = obj1Top +
obj1.offsetHeight;
  var
obj2Left = pos2.left -
window.document.body.scrollLeft;
  var
obj2Top = pos2.top -
window.document.body.scrollTop;
  var
obj2Right = obj2Left +
obj2.offsetWidth;
  var
obj2Bottom = obj2Top +
obj2.offsetHeight;
  
  if
(obj1Right <= obj2Left || obj1Bottom <= obj2Top
||
      obj1Left
>= obj2Right || obj1Top >=
obj2Bottom)
    result
= false;
  return
result;
}

//
获取对象的坐标
function
getPosition(Obj)
{
for (var
sumTop=0,sumLeft=0;Obj!=window.document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft,
Obj=Obj.offsetParent);
return
{left:sumLeft,top:sumTop}
}

//
是否IE5.5以上版本
function IsIE55Up () {
var agt =
navigator.userAgent.toLowerCase();
var isIE =
(agt.indexOf("msie")!=-1);
if
(isIE)
{
var stIEVer =
agt.substring(agt.indexOf("msie ") + 5);
var verIEFull =
parseFloat(stIEVer);
return verIEFull >=
5.5;
}
return
false;
}
</script>
<script>
    window.onload
=
function(){DivOver("div1")}
</script>

<div
style="position: absolute;left:10px;top:20px;width:200px;height:85px;border:1px
solid red;"
id="div1">
看看现在这个层下面的select不是简单的隐藏了:)
</div>
<select
name="">
<option>test1</option>
<option>test2</option>
<option>test3</option>
</select>

<select
name="">
<option>test1test1test1test1test1test1test1test1test1test1test1test1test1test1</option>
<option>test2</option>
<option>test3</option>
</select>

<select
name="">
<option>test1</option>
<option>test2</option>
<option>test3</option>
</select>

最后自己先点评下:
上面的方法可以解决这个问题。不过有时也会只出现ifram白块,但要显示的东西没有出来这时你要修改“overIframe
= document.createElement("<iframe src=‘about:blank‘
style=‘position:absolute;left:0;top:0;z-index:998;display:none‘ scrolling=‘no‘
frameborder=‘0‘></iframe>");”为“overIframe =
document.createElement("<iframe src=‘about:blank‘
style=‘position:absolute;left:0;top:0;display:none‘ scrolling=‘no‘
frameborder=‘0‘></iframe>");”,就是去掉其中的“z-index:998;”,然后后面的“obj.style.zIndex
= "999";”也可以不要,不过最好还是按上面的写。
希望可以帮大家解决问题。

时间: 2024-07-29 03:38:35

让层遮挡select(ie6下的问题)的相关文章

IE6下弹出层被select遮挡的解决

一些使用定位的弹出层在IE6下会被select遮挡,通过调整弹出层的z-index并不能解决问题,其实在弹出层中加一个iframe即可解决. 在弹出层加入代码如下: <div class="dialog"><!--我是弹出层--> <!--我是iframe--> <div style="position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;">

IE6下div层被select控件遮住的问题解决方法

Select在IE6下是处于最顶层的,因此想要遮住它,设置zIndex属性是不行的,就需要一个优先级更高的元素,就是iframe,当把iframe嵌套在弹出div层中后,把iframe设置为不可见,但它使弹出的div能浮于select等一些元素之上,因此完美解决了此问题,如下是需要弹出的Div代码,星号内代码为添加的iframe: <div id="quest"> <!--*******************************iframe***********

IE6下select覆盖div z-index无效 解决方案

遇到了IE6 select遮挡div的bug,这个bug表现为页面有浮动元素(某个div元素)在select上面时,在IE6里面select总是显示在这个浮动元素上方,该元素z-index的值多大都没有作用. 解决的思路是:IE6中iframe可以覆盖select,而div可以覆盖iframe,所以解决办法就是使用iframe元素包裹或者覆盖select元素或浮动元素,或者在select元素或浮动元素添加一个Iframe作为子元素. 方法一:Iframe包裹select元素  使用iframe包

IE6下select被这罩住

在我们做弹出遮罩层时经常遇到这种问题,就是select被这罩住不兼容IE6,其实解决这种问题并不难,只要掌握住原理就挺简单的. 首先就是当遮罩层出现时select要暂时隐藏,但是不能用display:none; 要用visibility:hidden;这样select的虽然隐藏但位置还在. 下面是js代码: <script language="javascript">function f(o){o.style.display = "none";docum

IE6下解决select层级高的问题

div在IE6下无法遮盖select,原因是在IE6下,浏览器将select元素视为窗口级元素,这时div或者其它的普通元素无论z-index设置的多高都是无法遮住select元素的. 解决方法有三种: 1:当浮动层div出现的时候,用JS将select隐藏,当浮动层div消失的时候select恢复出现. 2.可以用ul,li等进行模拟一个select的元素 3. 利用iframe的方式进行. 下面讲讲第三种最常用的的方式: 注意:生成的iframe是添加到要遮盖select的元素上. 其实相当

最近遇到一个很纠结的问题:jquery.autocomplete在IE6下被下拉框遮挡 。

最近遇到一个很纠结的问题:jquery.autocomplete在IE6下被下拉框遮挡 . 如图: 网上找到原因,例如:http://www.360doc.com/content/10/1126/16/2197500_72641076.shtml 但是,我们的问题是我们用了jquery.autocomplete这个控件,这些方法对于我们就不行了. 废话多了,直接解决方法: 第一步:打开jquery.autocomplete.min.js(或者直接jquery.autocomplete.js),找

IE6下的一些DIV适配总结

想到些以前的东西随便写下,在新丰两建网开发中,,使用了完全的div布局,由于对方要求,左侧应用栏要能活动,只能使用3列的方式.政府又广泛使用ie6,其实最好用table来做 这 时就暴露了IE6下div的一个适应问题,IE6下默认的margin-bottom不是0的,而是有一个固定的数,如果不制定div大小和相关属性,让 div在ie6下自动适配,那和火狐和ie9是不同的.最后的解决方法是全部div指定大小和相关属性.其实正确的方法是一开始开发的时候就进行处理, 在过程中还有个问题,就是在网站开

IE6下png背景不透明——张鑫旭博客读书笔记

从今天开始跟着大牛张鑫旭的步伐,每天进步一点点 问题:IE6不支持png背景透明或半透明 一.可解决的方法 补充:css滤镜主要是用来实现图像的各种特殊效果.(了解) css滤镜的标识符是"filter",总体的应用上和其他的css语句相同.css滤镜可分为基本滤镜和高级滤镜两种.css滤镜分类 CSS滤镜 可以直接作用于对象上,并且立即生效的滤镜称为基本滤镜.而要配合JavaScript等脚本语言,能产生更多变幻效果的则称为高级滤镜. 只有IE可以完全的支持滤镜,Firefox支持部

IE6下兼容问题(转载)

()1.终极方法:条件注释 <!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本. <![endif]--> <!--[if gte IE 6]> 这段文字仅显示在 IE6及IE6以上版本. <![endif]--> <!--[if gt IE 6]> 这段文字仅显示在 IE6以上版本(不包含IE6). <![endif]--> <!--[if IE 5.5]> 这段文字仅显示在 IE5.5. &