Javascript 如果框架填隙或ie6(及以下)选择z索引错误

Javascript 如果框架填隙或ie6(及以下)选择z索引错误,javascript,internet-explorer-6,shim,Javascript,Internet Explorer 6,Shim,嗯,我不确定是否有人遇到过这个问题 IE6上有一个简短的描述,任何对象都会显示在任何其他项目上,甚至div的。。。这意味着,如果你有一个奇特的javascript效果,在点击某个元素时显示一个应该位于所有元素之上的div(例如:lightbox、multibox等等),并且该div与重叠,那么你的div get将被显示为好像它位于[在这种情况下,最大和最小z索引都不起作用] 我尝试过谷歌搜索,找到了iframe垫片解决方案 但我想要一些干净的替代品 或者更好的是,有人找到了更好的解决方案吗? 由

嗯,我不确定是否有人遇到过这个问题
IE6上有一个简短的描述,任何
对象都会显示在任何其他项目上,甚至div的。。。这意味着,如果你有一个奇特的javascript效果,在点击某个元素时显示一个应该位于所有元素之上的div(例如:lightbox、multibox等等),并且该div与
重叠,那么你的div get将被显示为好像它位于
[在这种情况下,最大和最小z索引都不起作用]

我尝试过谷歌搜索,找到了iframe垫片解决方案
但我想要一些干净的替代品 或者更好的是,有人找到了更好的解决方案吗?
由于使用iframes的方法使用大约130mb的ram可能会降低穷人在IE7之前的机器速度,因此下拉列表是一个“窗口化”控件,这意味着它是由Windows直接呈现为控件,而不是由浏览器合成。因此,它不可能支持针对其他合成控件的z索引


为了在DDL上显示,必须使用另一个窗口控件,如IFRAME。您还可以使用一个鲜为人知的IE独有的特性,名为window.createPopup(),它本质上是一个无铬弹出窗口。它有一些限制,比如不可阻挡的点击,但是如果你正在构建一个悬停菜单系统,它们实际上是有帮助的。

有一个jquery插件,名为,它使得iframe方法非常容易实现

就个人而言,作为一名web开发人员,我已经到了不再关心IE6中的用户体验的地步。我会让它渲染得尽可能接近“正确”,并确保它的功能,但就速度而言,太糟糕了。他们可以升级。IE7(尽管与其他浏览器相比仍然非常慢)已经推出2年了(几乎到了今天!)。IE8很快就会推出。Firefox适用于所有平台。Safari也是一种选择(而且速度非常快)。Opera适用于大多数/每个平台


IE6于7年前发布。恕我直言,除了懒惰的用户和不称职的it部门(或者如果你是一名web开发人员),没有理由继续使用它

您不必使用循环隐藏每个
选择
。您只需要一个CSS规则,如:

* html .hideSelects select { visibility: hidden; }
以及以下JavaScript:

//hide:
document.body.className +=' hideSelects'

//show:
document.body.className = document.body.className.replace(' hideSelects', '');

(或者,您可以使用您最喜欢的
addClass
/
removeClass
实现)。

还有activex方法,我正在开始探索。需要创建条件代码才能使用activex控件,而不是ie6的选择框。这里有一个展示这项技术的展览


更新:用户计算机上的active-x控件似乎需要MS Office。从理论上讲,可能会在某个地方包含这些内容,但这会变得更加混乱。

如果有人感兴趣,下面是一些IE填隙代码

* html .shimmed {
    _azimuth: expression(
        this.shimmed = this.shimmed || 'shimmed:'+this.insertAdjacentHTML('beforeBegin','<iframe style="filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);position:absolute;top:0px;left:0px;width:100%;height:100%" frameBorder=0 scrolling=no src="javascript:false;document.write('+"''"+');"></iframe>'),
        'inherit');
}
*html.shimmed{
_方位角:表达式(
this.shimmed=this.shimmed | |'shimmed:'+this.insertAdjacentHTML('beforebeagin',''),
“继承”);
}

ref:by和这

最简单、最优雅的解决恼人IE bug的方法是:使用jQuery


我花了2天的时间尝试使其与WebSphere Portal/Portal应用程序配合使用,其中所有内容都是动态的,包括“飞越”菜单。我知道很多人都提出了自己的建议,但在我的例子中,我只是简单地使用jquery隐藏select,如下所示

$(':date').dateinput({
    format: 'dd/mm/yyyy',
    onBeforeShow: function(event) {
        $('select').hide();
    },
    onHide: function(event) {
        $('select').show();
    }
});

我以前有过这个问题。我使用的是我自己的代码,但我尝试过使用任何lightbox(jquery等)我们刚刚检查了我们的谷歌分析,发现30%的访问者使用IE6,所以我不能轻易放弃他们。好吧,根据你的意见,我决定采用优雅的IE降级方法,使用删除任何弹出分区都会重叠的项的方法。这个问题只会持续存在IE6及以下,嗯,耶,当iframe对浏览器可见时,它会多消耗50MB的内存。不管怎样,我从task manager的进程中检查了它。我发现寻找替代方案的另一个原因是iframe垫片不能与通过DOM动态生成的div一起工作。我想没有人真的愿意自由地将IE6放入垃圾桶,但我伪善说教大多数内部使用的应用程序设计为仅支持IE6。。。所以他们既不支持IE7也不支持更好的浏览器。。。我在这里传教,但它不在我的领域:|感谢bgiframe链接。这帮我省去了很多麻烦。:-)我认为是WindowsXPSP2添加了一个额外的安全功能,名为“允许脚本启动的Windows无大小或位置限制”。这是默认设置为禁用所有IE区域。这会导致您失去对createPopup窗口的控制。强烈建议不要使用此功能。我认为IE团队添加此功能是因为钓鱼网站使用createPopup窗口隐藏真实地址栏。