【发布时间】:2018-01-25 23:09:03
【问题描述】:
我遇到过这样一种情况,这些代码行单独工作,但在我将它们放入的结构中却没有。至少,在 IE 11 中没有。
如果您运行此代码,JS 会根据字母顺序重新排列选择框中的选项,然后选择顶部的项目。在 Chrome 和 Firefox 中,这是可行的。
在 IE v11 中,元素会重新排序,但顶部的项目(“五个”)不会被选中。更奇怪的是,如果您在 IE 控制台中运行最后一行,它实际上会选择最上面的项目。所以,问题不在于 IE 不理解语法。 那么,它是什么?
(我相信这在早期版本的 IE 中可以正常工作,但我不确定。)
$('#it option').sort(function(a,b){
return ( $(a).text() > $(b).text() ) ? 1 : -1;
}).appendTo( $('#it') );
$('#it option')[0].selected = 'selected';
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="it">
<option val="0">zero</option>
<option val="1">one</option>
<option val="2">two</option>
<option val="3">three</option>
<option val="4">four</option>
<option val="5">five</option>
<option val="6">six</option>
</select>
最后一行$('#it option')[0].selected = 'selected';肯定会在所有浏览器中执行,至少如果你在它之前和之后放置一个console.log(),你会看到它们输出到控制台。那么这个IE不喜欢的结构到底是什么?
到目前为止建议的一些答案仍然无效:
这些解决方案仍然存在在 IE (v11) 中无法按预期运行的完全相同的问题。
换行:
$('#it option')[0].selected = 'selected';至:$('#it option')[0].prop('selected',true);换行:
}).appendTo( $('#it') );至:}).detach().appendTo( $('#it') );
【问题讨论】:
-
什么版本的IE?
-
@JasonB,绝对是一个重要的问题,我已更新以包含该信息。
-
在 IE 上有什么功能吗?说真的,IE 问题太大了,如果你搜索 "IE selected option not working",你会得到大量的问题/答案,但每个问题/答案都是由不同的问题引起的。
-
您的排序比较函数无效。当文本相等时,比较器应返回 0。您可以使用内置的
.localeCompare()函数以适用于排序的方式比较字符串。 -
@Pointy,这真的不是问题,没有两个值相等。
标签: javascript internet-explorer