为什么在IE8中这不能取消选择多行选择框中的所有选项?
$("#myselect").children().removeAttr("selected");
有解决方法吗?我无法想到的任何事情(attr(“选择”,“”等)似乎都有效。
更新:Here is an updated jsFiddle.我至少让它降级,以便在IE8中选择第一个选项。但是如果没有硬编码选择='选择'和 IE8似乎需要的.attr调用,它在Firefox,Chrome和IE8中做了3件不同的事情! See this version:,这很简单,似乎应该有效:
也许我让自己疯了,在那里我看不到有什么错误?
答案 0 :(得分:66)
该问题以误导性方式提出。 “删除selected
属性”和“取消选择所有选项”完全不同。
要以文档化的跨浏览器方式取消选择所有选项,请使用
$("select").val([]);
或
// Note the use of .prop instead of .attr
$("select option").prop("selected", false);
答案 1 :(得分:22)
这是jQuery转换为IE8的方式,不一定是浏览器本身。
我能够通过去旧学校和jQuery打破一行来解决这个问题:
document.getElementById('myselect').selectedIndex = -1;
答案 2 :(得分:20)
这有效:
$("#myselect").find('option').removeAttr("selected");
或
$("#myselect").find('option:selected').removeAttr("selected");
答案 3 :(得分:10)
使用jQuery 1.9及更高版本:
$("#mySelect :selected").prop('selected', false);
答案 4 :(得分:2)
与@radiak的响应类似,但使用jQuery(请参阅this API document并评论如何更改selectedIndex
)。
$('#mySelectParent').find("select").prop("selectedIndex",-1);
这种方法的好处是:
#mySelectParent
)答案 5 :(得分:1)
另一种选择:
$('option:selected', $('#mySelectParent')).removeAttr("selected");
希望有所帮助
答案 6 :(得分:1)
嗯,我在这个问题上花了很多时间。 要获得使用Chrome和IE的答案,我必须改变我的方法。 我们的想法是避免删除所选的选项(因为无法使用IE正确删除它)。 =>这意味着选择选项不是通过在选项上添加或设置所选属性,而是在"选择"中选择一个选项。使用selectedIndex prop。
的级别之前:
$('#myselect option:contains("value")').attr('selected','selected');
$('#myselect option:contains("value")').removeAttr('selected'); => KO with IE
之后:
$('#myselect').prop('selectedIndex', $('#myselect option:contains("value")').index());
$('#myselect').prop('selectedIndex','-1'); => OK with all browsers
希望它会有所帮助