在web应用开发中,经常会遇到使用层来显示数据的情况。而使用IE6来浏览页面的时候,弹出来的层无法遮住表单中的下拉框组件,导致其显示在层的上面,从而影响显示效果。解决的办法是在该层的下面再添加一个层,层的里面使用iframe填充,这样显示的时候就可以挡住下拉框了。(这里说一下原因:因为IE6中的下拉框组件为顶级元素,所以层无法将其挡住;而iframe却可以,我们可以利用这个特点来修正显示bug)
具体的做法如下:
function openNewDiv(_id,msg) {
var m = "mask";
if (docEle(_id)) document.removeChild(docEle(_id));
if (docEle(m)) document.removeChild(docEle(m));
//用于遮盖select的层开始:s
// 创建层
var s=document.createElement('DIV');
s.id = 'forHide';
// 设置层的相关属性
s.style.visibility='';
// 定义层的样式
s.style.position='absolute';
s.style.left=(parseInt(document.body.scrollWidth) - 300) / 2 - 50 + "px"; // 屏幕居中
s.style.top='100px';
s.style.width='300px';
s.style.height='400px';
s.style.border='black 1px solid';
s.style.backgroundColor='white';
// 生成iframe
var L=document.createElement('IFRAME');
L.name='completionFrame';
// 定义iframe的样式,宽高与s相同
L.width=s.style.width;
L.height=s.style.height;
// 附加L到s
s.appendChild(L);
// 显示s
document.body.appendChild(s);
//用于遮盖select的层结束
//新激活数据显示图层
var newDiv = document.createElement("div");
newDiv.id = _id;
newDiv.style.position = "absolute";
newDiv.style.zIndex = "9999";
newDiv.style.width = "300px";
newDiv.style.height = "400px";
newDiv.style.top = "100px";
newDiv.style.left = (parseInt(document.body.scrollWidth) - 300) / 2 - 50+ "px"; // 屏幕居中
newDiv.style.background = "#EFEFEF";
newDiv.style.border = "1px solid #860001";
newDiv.style.padding = "5px";
//newDiv.innerHTML = "新激活图层内容";
newDiv.innerHTML = msg;
document.body.appendChild(newDiv);
// mask图层
var newMask = document.createElement("div");
newMask.id = m;
newMask.style.position = "absolute";
newMask.style.zIndex = "1";
newMask.style.width = document.body.scrollWidth + "px";
newMask.style.height = document.body.scrollHeight + "px";
newMask.style.top = "0px";
newMask.style.left = "0px";
newMask.style.background = "#000";
newMask.style.filter = "alpha(opacity=40)";
newMask.style.opacity = "0.40";
document.body.appendChild(newMask);
// 关闭mask和新图层
//var newA = document.createElement("a");
//newA.href = "#";
//newA.innerHTML = "关闭激活层";
//newA.innerHTML = "关闭";
//newA.onclick = function() {
// document.body.removeChild(docEle(_id));
// document.body.removeChild(docEle(m));
// return false;
//}
//newDiv.appendChild(newA);
}
备注:上次写的时候忘掉了这两个方法:
var docEle = function() {
return document.getElementById(arguments[0]) || false;
}
和
function closeDiv() {
document.body.removeChild(docEle('forHide'));
document.body.removeChild(docEle('newDiv'));
document.body.removeChild(docEle('mask'));
//return false;
}
closeDiv()方法里的docEle参数根据实际情况自行填写,反正就是创建的层都要关闭掉。这个办法的局限性是要确保弹出层必须在下拉框的上面,以使得其可以遮住下拉框。为了达到这个目的,有时不得不变更页面的显示(具体就是改变层的位置)。
分享到:
相关推荐
解决的办法是:做两个浮动层,一个浮动层的根标签是IFrame,另一个浮动层的根标签是Div,两个浮动层的位置、大小均相等,然后先显示IFrame浮动层,再显示Div浮动层, 这样IFrame浮动层就为Div浮动层遮盖住了下面的...
12.解决了在有滚动条时,ie6下被表单遮挡的问题 13.支持回调函数。当该插件执行完毕时,执行另外一个指定函数 14.可以自己设置提示框的长度 15.解决了无法获取用户填写默认值的问题 16.当输入框失去焦点时,提示框会...
此程序是模仿Google(sgguest)输入提示框所编写 ...此程序使用方便简单、易用灵活 且不限Asp、php、net ...12.解决了在有滚动条时,ie6下被表单遮挡的问题 13.支持回调函数。当该插件执行完毕时,执行另外一个指定函数
12.解决了在有滚动条时,ie6下被表单遮挡的问题 13.支持回调函数。当该插件执行完毕时,执行另外一个指定函数 14.可以自己设置提示框的长度 15.解决了无法获取用户填写默认值的问题 16.当输入框失去焦点时,提示...
可以不用担心被下拉框、flash、Iframe等这些东西遮挡; 一个Popup窗口打开后,当在它的区域以外点击或者另一个Popup窗口被打开时都会自动关闭; Popup窗口是没有焦点的; 用户不能改变Popup窗口大小; Popup...
12.解决了在有滚动条时,ie6下被表单遮挡的问题 13.支持回调函数。当该插件执行完毕时,执行另外一个指定函数 ######V1.7解决问题############ 14.可以自己设置提示框的长度 15.解决了无法获取用户填写默认值的问题 ...
12.解决了在有滚动条时,ie6下被表单遮挡的问题 13.支持回调函数。当该插件执行完毕时,执行另外一个指定函数 ######V1.7解决问题############ 14.可以自己设置提示框的长度 15.解决了无法获取用户填写默认值的问题 ...
2.兼容IE6,IE7,FF 3.支持input显示与value分离 4.支持下拉框按钮 5.支持显示结果数量 6.可以一个页面多次使用 7.模拟下拉框不会被select遮挡 8.调用更方便(内核已改为jq插件) 9.皮肤修改方便 ,外置的css样式文件...
这也好办,没有我一箭穿心解决不了的。点击“开始”。 10、接下来点击“设置”“任务栏和开始菜单”,勾选“自动隐藏”“OK”。 怎样连接网络教程 1、打开VisualStudio 2008—>工具-->设备仿真器管理器-->...
解决了在有滚动条时,ie6下被表单遮挡的问题13.支持回调函数。当该插件执行完毕时,执行另外一个指定函数14.可以自己设置提示框的长度15.解决了无法获取用户填写默认值的问题16.当输入框失去焦点时,提示框会自动...