在jQuery中取消select<select>的最佳方法是什么?

<select size="2"> <option selected="selected">Input your option</option> <option>Input your option</option> </select> 

什么是最好的方式,使用jQuery,优雅地取消select?

使用removeAttr …

 $("option:selected").removeAttr("selected"); 

或道具

 $("option:selected").prop("selected", false) 

这里有很多答案,但不幸的是,所有这些答案都很老,因此依赖于attr / removeAttr ,这实际上并不适用。

@coffeeyesplease正确地提到一个好的,跨浏览器的解决scheme是使用

 $("select").val([]); 

另一个好的跨浏览器解决scheme是

 // Note the use of .prop instead of .attr $("select option").prop("selected", false); 

你可以看到它在这里进行自检。 testingIE 7/8/9,FF 11,Chrome 19。

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

 $("#selectID").val([]); 

.val()也适用于selecthttp://api.jquery.com/val/

迄今为止的答案只适用于IE6 / 7中的多个select; 对于更常见的非多选,您需要使用:

 $("#selectID").attr('selectedIndex', '-1'); 

这在flyfishr64链接的文章中有解释。 如果你看一下,你会看到有两种情况 – 多/非多。 没有什么能阻止你为完整的解决scheme而努力:

 $("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected"); 

最简单的方法

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

我简单地在select本身使用它,它做了伎俩。

我在jQuery 1.7.1

快速谷歌发现这篇文章 ,描述了如何做到你想在IE中的单个和多个select列表。 解决scheme看起来也非常优雅:

 $('#clickme').click(function() { $('#selectmenu option').attr('selected', false); }); 
 $("#selectID option:selected").each(function(){ $(this).removeAttr("selected"); }); 

这将迭代通过每个项目,并取消select只有那些被检查

哦,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 

只是为了告诉你这是多快: 基准

 $(option).removeAttr('selected') //replace 'option' with selected option's selector 
 $("option:selected").attr("selected", false); 

非常感谢解决scheme。

单选组合列表的解决scheme完美。 我在很多网站search后发现这个。

 $("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected"); 

通常当我使用select菜单时,每个选项都有一个与之相关的值。 例如

 <select id="nfl"> <option value="Bears Still...">Chicago Bears</option> <option selected="selected" value="Go Pack">Green Bay Packers</option> </select> console.log($('#nfl').val()) logs "Go Pack" to the console Set the value to an empty string $('#nfl').val("") console.log($('#nfl').val()) logs "" to the console 

现在这不会从选项中删除选定的属性,但我真正想要的是值。

另一种简单的方法

$("#selectedID")[0].selectedIndex = -1