IE 中的下拉列表宽度

IT技术 javascript html internet-explorer drop-down-menu
2021-02-09 00:01:13

在 IE 中,下拉列表的宽度与下拉框的宽度相同(我希望我说得通),而在 Firefox 中,下拉列表的宽度根据内容而变化。

这基本上意味着我必须确保 Dropbox 足够宽以显示可能的最长选择。这让我的页面看起来很丑:(

这个问题有什么解决方法吗?如何使用 CSS 为下拉框和下拉列表设置不同的宽度?

6个回答

这是另一个基于jQuery的示例。与此处发布的所有其他答案相反,它考虑了所有键盘和鼠标事件,尤其是点击:

if (!$.support.leadingWhitespace) { // if IE6/7/8
    $('select.wide')
        .bind('focus mouseover', function() { $(this).addClass('expand').removeClass('clicked'); })
        .bind('click', function() { $(this).toggleClass('clicked'); })
        .bind('mouseout', function() { if (!$(this).hasClass('clicked')) { $(this).removeClass('expand'); }})
        .bind('blur', function() { $(this).removeClass('expand clicked'); });
}

结合这段 CSS 使用它:

select {
    width: 150px; /* Or whatever width you want. */
}
select.expand {
    width: auto;
}

您需要做的就是将类添加wide到有问题的下拉元素中。

<select class="wide">
    ...
</select>

这是一个 jsfiddle 示例希望这可以帮助。

根据您的其他 css 规则 - 您可能必须将 !important 添加到宽度.. width: auto !important;
2021-03-12 00:01:13
@DMin:对不起,我们不支持像 IE6 这样的古老和过时的浏览器。
2021-03-18 00:01:13
@BalusC : :) 我知道我的朋友 IE 很糟糕——不过我使用了你的答案,它适用于 IE7——为 IE6 编写了单独的代码,其中包括你的答案 + 绑定。('mouseenter'.. -- 工作正常 -- 谢谢无论如何! :)
2021-04-02 00:01:13
+1:从这里提出的所有解决方案中,这对我来说是最好的。我还需要对 CSS 和 HTML 进行更改以使其适用于我的案例。这么多的工作,对于应该开箱即用的东西。
2021-04-04 00:01:13
适用于 IE7 而不是 IE6 -- 是否有针对 IE6 的调整?
2021-04-09 00:01:13

创建您自己的下拉列表比它的value更痛苦。您可以使用一些 JavaScript 使 IE 下拉列表工作。

它使用了一些 YUI 库和一个特殊的扩展来修复 IE 选择框。

您将需要包含以下内容并将您的<select>元素包装<span class="select-box">

将这些放在页面的 body 标签之前:

<script src="http://us.js2.yimg.com/us.js.yimg.com/lib/common/utils/2/yahoo_2.0.0-b3.js" type="text/javascript">
</script>
<script src="http://us.js2.yimg.com/us.js.yimg.com/lib/common/utils/2/event_2.0.0-b3.js" type="text/javascript">
</script>
<script src="http://us.js2.yimg.com/us.js.yimg.com/lib/common/utils/2/dom_2.0.2-b3.js" type="text/javascript">
</script>
<script src="ie-select-width-fix.js" type="text/javascript">
</script>
<script>
// for each select box you want to affect, apply this:
var s1 = new YAHOO.Hack.FixIESelectWidth( 's1' ); // s1 is the ID of the select box you want to affect
</script>

接受后编辑:

您也可以在没有 YUI 库和 Hack 控件的情况下执行此操作。您真正需要做的就是在 select 元素上放置一个 onmouseover="this.style.width='auto'" onmouseout="this.style.width='100px'" (或任何您想要的)。YUI 控件为它提供了漂亮的动画,但这不是必需的。这个任务也可以用 jquery 和其他库来完成(虽然,我还没有找到明确的文档)

-- 对编辑的修正:
IE 的选择控件的 onmouseout 有问题(它不认为鼠标悬停在选项上是选择上的鼠标悬停)。这使得使用 mouseout 非常棘手。第一个解决方案是迄今为止我发现的最好的解决方案。

这些链接不再是 404,而是显示了我认为的恶意垃圾邮件。我确实考虑过投反对票,但我会很好并且只是指出它。
2021-03-14 00:01:13
我在这两个链接上都收到了 404
2021-03-24 00:01:13
此修复程序的问题在于,如果您有动态选择,例如在产品属性的电子商务应用程序中。你永远不会知道所有下拉菜单的 ID
2021-04-08 00:01:13

你可以试试以下...

  styleClass="someStyleWidth"
  onmousedown="javascript:if(navigator.appName=='Microsoft Internet Explorer'){this.style.position='absolute';this.style.width='auto'}" 
  onblur="this.style.position='';this.style.width=''"

我试过了,它对我有用。不需要其他任何东西。

很酷,我稍微改进了它(使用 IE 检测的条件注释)并添加了一些注释,它运行良好并且没有 jQuery 或其他库。请参阅此处:jsbin.com/ubahe5/edit - 请编辑您的答案,我想给您 +1,但我不能,因为我之前投错了票。
2021-04-06 00:01:13

我使用了以下解决方案,它似乎在大多数情况下都能很好地工作。

<style>
select{width:100px}
</style>

<html>
<select onmousedown="if($.browser.msie){this.style.position='absolute';this.style.width='auto'}" onblur="this.style.position='';this.style.width=''">
  <option>One</option>
  <option>Two - A long option that gets cut off in IE</option>
</select>
</html>

注意:$.browser.msie确实需要 jquery。

对于其他感到困倦的人来说应该是 onmousedown 而不是 onmousdown - 我花了一些时间来查看问题
2021-04-08 00:01:13

@Thad 您还需要添加一个模糊事件处理程序

$(document).ready(function(){
    $("#dropdown").mousedown(function(){
        if($.browser.msie) {
            $(this).css("width","auto");
        }
    });
    $("#dropdown").change(function(){
        if ($.browser.msie) {
            $(this).css("width","175px");
        }
    });
    $("#dropdown").blur(function(){
        if ($.browser.msie) {
            $(this).css("width","175px");
        }
    });
});

但是,这仍然会在单击时展开选择框,而不仅仅是元素。(它似乎在 IE6 中失败,但在 Chrome 和 IE7 中完美运行)