jquery删除选项的“selected”属性?

时间:2011-10-31 22:58:00

标签: jquery internet-explorer

为什么在IE8中这不能取消选择多行选择框中的所有选项?

$("#myselect").children().removeAttr("selected");

有解决方法吗?我无法想到的任何事情(attr(“选择”,“”等)似乎都有效。

更新:Here is an updated jsFiddle.至少让它降级,以便在IE8中选择第一个选项。但是如果没有硬编码选择='选择' IE8似乎需要的.attr调用,它在Firefox,Chrome和IE8中做了3件不同的事情! See this version:,这很简单,似乎应该有效:

    在Firefox中
  • :没有选择
  • Chrome中的
  • :选择了第0个选项
  • IE8中的
  • :选择了第一个选项

也许我让自己疯了,在那里我看不到有什么错误?

7 个答案:

答案 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");

jsFiddle

答案 3 :(得分:10)

使用jQuery 1.9及更高版本:

$("#mySelect :selected").prop('selected', false);

答案 4 :(得分:2)

与@radiak的响应类似,但使用jQuery(请参阅this API document并评论如何更改selectedIndex)。

$('#mySelectParent').find("select").prop("selectedIndex",-1);

这种方法的好处是:

  • 你可以留在jQuery
  • 您可以使用jQuery选择器(示例中为#mySelectParent
  • 来限制范围
  • 更明确定义的代码
  • 适用于IE8,Chrome,FF

答案 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

希望它会有所帮助