html中div被select挡住各种问题总结与解决方法

最好的方法:iframe来当作div的底

Div被Select挡住,是一个比较常见的问题。  
      有的朋友通过把div的内容放入iframe或object里来解决。  
      可惜这样会破坏页面的结构,互动性不大好。  
   
      这里采用的方法是:  
   
      虽说div直接盖不住select  
      但是div可以盖iframe,而iframe可以盖select,  
      所以,把一个iframe来当作div的底,  
      这个div就可以盖住select了.  

 

 代码如下 复制代码
<html>
<head>
<script>
function DivSetVisible(state)
{
var DivRef = document.getElementById('PopupDiv');
var IfrRef = document.getElementById('DivShim');
if(state)
{
DivRef.style.display = "block";
IfrRef.style.width = DivRef.offsetWidth;
IfrRef.style.height = DivRef.offsetHeight;
IfrRef.style.top = DivRef.style.top;
IfrRef.style.left = DivRef.style.left;
IfrRef.style.zIndex = DivRef.style.zIndex - 1;
IfrRef.style.display = "block";
}
else
{
DivRef.style.display = "none";
IfrRef.style.display = "none";
}
}
</script>
</head>
<body>
<form>
<select>
<option>A Select Box is Born ....</option>
</select>
</form>
<div id="PopupDiv" style="position:absolute; top:25px; left:50px; padding:4px; display:none; background-color:#000000; color:#ffffff; z-index:100">
.... and a DIV can cover it up<br/>through the help of an IFRAME.
</div>
<iframe id="DivShim" src="javascript:false;" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;">
</iframe>
<br/>
<br/>
<a href="#" onclick="DivSetVisible(true)">Click to show DIV.</a>
<br/>
<br/>
<a href="#" onclick="DivSetVisible(false)">Click to hide DIV.</a>
</body>
</html>

在IE7及以下 虽然disabled 对 select能起作用,但对select下的option却无效。
解决方法通常是判断浏览器,如果是IE7以下的话,则当change和focus时改变option颜色和并且点击“无效”的option后 select选中的项值不变化

 代码如下 复制代码

//判断是否是IE7以下浏览器
if (navigator.appVersion.indexOf("MSIE 5.5") >= 0 || navigator.appVersion.indexOf("MSIE 6.0") >= 0
    || navigator.appVersion.indexOf("MSIE 7.0") >= 0) {

    window.attachEvent("onload", function() {
        ReloadSelectElement();

        //给所有select添加事件
        function ReloadSelectElement() {
            var s = document.getElementsByTagName("select");
            if (s.length > 0) {
                for (var i = 0, select; select = s[i]; i++) {
                    (function(e) {
                        //获得焦点时,将当前选中的项目记录下来
                        e.attachEvent("onfocus", function() {
                            e.setAttribute("current", e.selectedIndex);
                        });
                        //项目改变时,如果选中的是“无效”的项目,则返回返回前一状态
                        e.attachEvent("onchange", function() {
                            restore(e);
                        });
                    })(select)
                    //将含有disabled属性的项目“无效化”
                    emulate(select);
                }
            }
        }

        function restore(e) {
            if (e.options[e.selectedIndex].disabled) {
                e.selectedIndex = e.getAttribute("current");
            }
        }

        function emulate(e) {
            for (var i = 0, option; option = e.options[i]; i++) {
                if (option.disabled) {
                    option.style.color = "graytext";
                }
                else {
                    option.style.color = "menutext";
                }
            }
        }
    })
}

 

获取选中的option方式在IE中与FF/Chrome中的差异:
FF/Chrome中可以直接用selectDoc.selectedOptions获取到选中的option集合
IE中则没有selectedOptions属性(至少IE8,其他的没有测...)
如果 multiple="multiple" 则需要迭代所有option,用optionDoc.selected判断是否被选中,从而获取被选中的option集合
如果没有设置multiple的话,则可以直接用selectedIndex获取选中的option

时间: 2024-10-26 16:54:46

html中div被select挡住各种问题总结与解决方法的相关文章

AngularJS 中使用Swiper制作滚动图不能滑动的解决方法_AngularJS

Swiper是目前较为流行的移动端触摸滑动插件,因为其简单好用易上手,受到很多前端开发者的欢迎. 今天在使用Swiper的时候遇到这个问题: 使用angularjs动态循环生成swiper-slide类,在swiper-wrapper里生成6个以上的滑动页,可是就是划不到第二页,尝试将longSwipesRatio的值修改到最小,仍然不起作用. <div class="swiper-wrapper" > <!-- =======循环部分======= --> &

MySQL 处理插入过程中的主键唯一键重复值的解决方法_Mysql

本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IGNORE 使用ignore当插入的值遇到主键(PRIMARY KEY)或者唯一键(UNIQUE KEY)重复时自动忽略重复的记录行,不影响后面的记录行的插入, 创建测试表 CREATE TABLE Tignore (ID INT NOT NULL PRIMARY KEY , NAME1 INT )d

(原创)在pl/sql developer中查看package或表结构报ora-01460的解决方法

在pl/sql developer中查看package或表结构报ora-01460的解决方法 今天有同事报有个数据库不能用pl/sql developer查看package或表结构. 开始以为是服务器端与客户端的字符集不一致所至.查看数据库的字符集为ZHS32GB18030select * from V$NLS_PARAMETERS t where t.PARAMETER LIKE '%CHARACTERSET%';PARAMETER                               

C#中label内容显示不全、不完整的解决方法

  这篇文章主要介绍了C#中label内容显示不全.不完整的解决方法,只需要把两个属性设置一下即可解决这个问题,需要的朋友可以参考下 c# label的内容显示不全,需要设置如下属性即可: 1.将Lable的font属性的字体改成宋体; 2.将AutoSize属性改成true;

Win8.1安装iTunes软件提示“安装过程中出错,您的系统未被修改”解决方法

Win8.1安装iTunes软件提示"安装过程中出错,您的系统未被修改"解决方法   解决方法:出现这个错误是由于在win8.1中有一个"Devic Intall Service"服务没有启动引起的,只要我们正常启动他就可以了. 操作方法: 1.按下WIN+R键,然后输入 services.msc 回车; 2.在服务列表中找到"Devic Intall Service"服务;xitongcheng.com 3.双击该服务,在配置中点击"

win7系统中玩梦幻西游总是一卡一卡的解决方法

win7系统中玩梦幻西游总是一卡一卡的解决方法   故障原因: 1.显卡驱动. 2.梦幻锦衣系统的垃圾代码解决方式. 3.硬盘IO和显卡. 解决方法: 1.放弃360,或者每次上游戏之前都refresh2.0一次; 2.根据技术牛人的方法,删除梦幻西游根目录下v3d_cache文件夹中的所有文件.[这个要求每次登录游戏前都删除]. 我的解决办法是: 1.删除梦幻西游根目录下v3d_cache文件夹中v3d.dat; 2.右击新建文本文档,重命名为v3d.dat[这里注意后缀扩展名也要更改,如果你

Windows7中U盘无法停止通用卷的原因跟解决方法

在使用U盘过程中,遇到最郁闷的问题就是使用完U盘要安全移除U盘的时候弹出"无法停止通用卷".很多时候弹出这个我们基本上就不关它了,直接把U盘拔出来了.但是如果有一次你直接这样拔出U盘,然后下次使用U盘的时候你发现数据丢失了(虽然这个概率不高我也就遇到一次),我丢失的那一次让我有哭的冲动.所以以后我要把出U盘如果弹出"无法停止通用卷",我甘愿等到我电脑不用了.关机完我再拔出U盘,也不敢直接移除了.而这篇文章是跟大家分享下我个人总结的U盘无法停止通用卷的原因跟解决方法

电脑中无法启动Network List Service服务项的解决方法

  电脑中无法启动Network List Service服务项的解决方法 1.按组合键win+r打开运行,输入dcomcnfg并回车; 2.打开组件服务后,依次展开"组件服务→计算机→我的电脑→dcom配置",找到netprofm; 3.右击netprofm,打开属性; 4.切换到安全选项卡,在"启动和激活权限"中选择"自定义",并点击"编辑"按钮; 5.点击"添加"按钮; 6.输入对象名称"L

python中print的不换行即时输出的快速解决方法_python

关于Python2.x和3.x带来的print不换行的问题:昨天有发过推文,利用end = 定义,解决了横向的小问题,但是由于屏幕显示的问题,若字符串长度过大,则会引起不便.两个或多个print做分割的情况下,如何保持依然横向输出,一般的是在print尾部加上逗号(,)但是在3.x下,则不行,需要使用end = "(something)",some signs like , . ; 'also you can put a word or str in"". Exam