在jQuery中取消选择<select>的最佳方法?

use*_*729 208 jquery select

<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>
Run Code Online (Sandbox Code Playgroud)

使用jQuery优雅地取消选择选项的最佳方法是什么?

Ei *_*ung 329

使用removeAttr ...

$("option:selected").removeAttr("selected");
Run Code Online (Sandbox Code Playgroud)

或者道具

$("option:selected").prop("selected", false)
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不是做事的方式(并且不能普遍地用于启动).正确的方法是`.val([])`或`.prop("selected",false)` - 向下滚动. (59认同)
  • 在IE 8下不起作用.请参阅http://stackoverflow.com/questions/7960773/jquery-remove-selected-attribute-of-option# (3认同)
  • 或.val([''])选择空值(如果有)。 (2认同)
  • `$("option:selected").prop("selected", false)` 有时不起作用。(不适用于带有 jquery v1.4.2 的 chrome 浏览器) (2认同)

Jon*_*Jon 153

这里有很多答案,但遗憾的是它们都很老,因此依赖attr/ removeAttr它真的不是那种方式.

@coffeeyesplease正确地提到了一个好的跨浏览器解决方案

$("select").val([]);
Run Code Online (Sandbox Code Playgroud)

另一个很好的跨浏览器解决方案是

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);
Run Code Online (Sandbox Code Playgroud)

你可以看到它在这里运行自检.在IE 7/8/9,FF 11,Chrome 19上测试.

  • @MikeyG:[This](http://jsfiddle.net/aWbD8/1),注意到[`Array.indexOf`](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/ Global_Objects/Array/indexOf)需要IE <9的polyfill(或者您可以使用许多JS库提供的任何等效方法). (2认同)
  • @Fr0zenFyr:如果您从预先选择的选项开始,然后通过单击鼠标手动取消选择它,也不会删除该属性 - 但提交表单当然可以保证发布正确的数据。HTML *属性*(确定初始状态)和 DOM *属性*(确定显示内容和提交内容)之间存在天壤之别。这实际上是关注属性的解决方案不正确的原因。属性决定了属性的初始值,但仅此而已。 (2认同)

cof*_*ase 24

自问过以来已经有一段时间了,我还没有在旧浏览器上测试过,但在我看来,一个更简单的答案是

$("#selectID").val([]);
Run Code Online (Sandbox Code Playgroud)

.val()适用于选择http://api.jquery.com/val/


Jos*_*ter 23

最简单的方法

$('select').val('')

我只是在选择本身使用它,它就可以了.

我在使用jQuery 1.7.1.

  • 我刚刚遇到了有关此解决方案的一个问题。选项标签仍将具有“selected”属性 (2认同)

the*_*man 19

到目前为止,答案仅适用于IE6/7中的多个选择; 对于更常见的非多选,您需要使用:

$("#selectID").attr('selectedIndex', '-1');
Run Code Online (Sandbox Code Playgroud)

这在flyfishr64链接的帖子中有解释.如果你看一下,你会看到有两种情况 - 多/非多.没有什么可以阻止你去寻找完整的解决方案:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");
Run Code Online (Sandbox Code Playgroud)


Bla*_*ten 7

哦,jquery.

由于还有本机javascript方法,我觉得需要提供一个.

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options
Run Code Online (Sandbox Code Playgroud)

只是为了向您展示这是多快:基准


Din*_*yte 6

$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});
Run Code Online (Sandbox Code Playgroud)

这将遍历每个项目并仅取消选中已检查的项目


Jef*_*tte 5

一个快速谷歌发现这篇文章描述了如何在IE中为单个和多个选择列表做你想要的.解决方案似乎也很优雅:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 
Run Code Online (Sandbox Code Playgroud)


小智 5

$("#select_id option:selected").prop("selected", false);
Run Code Online (Sandbox Code Playgroud)