14

嗯,我不确定是否有人遇到过这个问题
,简要说明是在 IE6 上,任何<select>对象都会显示在任何其他项目上,甚至是 div 的......这意味着如果你有一个花哨的 javascript 效果来显示一个应该在顶部的 div一切(例如:灯箱,多框等) onclick 某个元素并且该 div 与<select>您的 div 重叠显示,就好像它在<select>[在这种情况下,最大和最小 z-index 不起作用]

我试过谷歌搜索并找到了 iframe shim 解决方案
,但我想要一些非常干净的替代方案或更好的替代方案,但有人找到更好的解决方案吗?因为使用 iframe 的方法使用大约 130mb 的内存可能会减慢穷人的机器

4

7 回答 7

8

您不必隐藏每个select使用循环。您所需要的只是一个 CSS 规则,例如:

* html .hideSelects select { visibility: hidden; }

以及以下 JavaScript:

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

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

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

于 2008-10-22T08:01:35.463 回答
3

有一个名为bgiframe的 jquery 插件,它使 iframe 方法很容易实现。

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

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

于 2008-10-22T06:04:10.740 回答
2

如果有人感兴趣,这里有一些 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');
}

参考:这个要点微妙渐变和扎克莱瑟曼的这篇文章

于 2008-11-21T21:21:47.770 回答
1

在 IE7 之前,下拉列表是一个“窗口”控件,这意味着它直接由 Windows 呈现为控件,而不是由浏览器合成它。因此,它不可能支持针对其他合成控件的 z 索引。

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

于 2008-10-22T05:35:16.053 回答
1

解决这个烦人的 IE 错误的最简单和最优雅的解决方案位于:http ://docs.jquery.com/Plugins/bgiframe using jQuery。

在尝试了 2 天以使其与 WebSphere Portal / Portal Applications 一起工作后,我得出了这个结论,其中一切都是动态的,包括飞越菜单。

于 2009-11-17T20:27:16.067 回答
0

还有我开始探索的 activex 方法。它需要创建条件代码来使用activex 控件而不是ie6 的选择框。有一个演示脚本展示了该技术,此处将对此进行更详细的讨论

更新:似乎需要 MS Office 才能将 active-x 控件放在用户的机器上。从理论上讲,有可能以某种方式将其包含在某个地方,但这变得更加混乱。

于 2008-11-21T18:45:52.293 回答
0

我知道很多人提出了他们自己的提示,但就我而言,我只是简单地使用 jquery 隐藏选择,如下所示。

$(':date').dateinput({
    format: 'dd/mm/yyyy',
    onBeforeShow: function(event) {
        $('select').hide();
    },
    onHide: function(event) {
        $('select').show();
    }
});
于 2011-03-08T17:27:53.367 回答