如何使用jQuery选择<select>的第一个选项


546

如何使用jQuery选择第一个选项?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Answers:


954
$("#target").val($("#target option:first").val());

362
应该注意的是,使用$(“#target”)[0] .selectedIndex = 0;更容易做到这一点。
David Andres 2009年

17
它可以工作,但是基于第一个元素的,如果第一个元素包含空值,它将选择最接近的具有值的元素
evilReiko 2011年

2
似乎工作出色,但IE6除外。不确定7-8,在9上进行
。– Nicholi

3
我背诵我以前的声明,超越自己。$(“#target”)。val(“ option:first”); 除IE6 $(“ target”)。val($(“#target option:first”)。val())以外,其他任何地方都可以使用。可以在IE6中使用,因为您实际上是在查找第一个值,并将其输入为目标值。两个id查找,而不是一个。
Nicholi 2012年

2
对于IE6、7和8来说,这实际上是必需的。而.val('option:first')在IE9(以及Safari和Firefox,Chrome和Opera)中运行。
Nicholi

178

你可以试试这个

$("#target").prop("selectedIndex", 0);

2
这并非在所有情况下均正常工作。我有一个父母/子女级联下拉菜单。选择父级#1,显示子级#1,选择父级#2,显示子级#2。他们每次选择新的父母时,都应将相应的孩子重新设置为第一个选项。此解决方案不执行此操作。它将子菜单保留为“粘性”。请参阅此问题的option:selected.prop('selected',false)/ option:first.prop('selected','selected')解决方案,以了解在更多情况下的答案。
Lance Cleveland

这不会触发onChange事件。至少在镀铬中。
Tomasz Mularczyk

谢谢!这是对我有用的答案列表中的第一个答案。
Casey Crookston,

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Romesh如何设置基于值的selectedIndex?
Junior Frogie

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
好的第二种方法。请添加所选属性的值。例如,attr(“ selected”,“ selected”)。如果没有此额外参数,则无法进行选择。
David Andres 2009年

@EgorPavlikhin-我刚刚编辑了答案,以包含JQuery代码,以从可能已经选择的所有选项中删除“ selected”标志。现在答案是正确的:)
jmort253

20
不需要该each功能,应该是: $('#target option[selected="selected"]').removeAttr('selected')现在也应该与removeProp和一起使用prop
vsync

James Lee Baker在这个问题上其他地方的答案的更全面版本,但是增加了计算周期,如果接口得到良好管理,则可能不需要。
Lance Cleveland

65

使用时

$("#target").val($("#target option:first").val());

如果第一个选项值为null,则在Chrome和Safari中将不起作用。

我更喜欢

$("#target option:first").attr('selected','selected');

因为它可以在所有浏览器中使用。


3
您还需要“取消选择”任何先前选择的元素,以使其在更多情况下起作用。有关详细信息,请参见James Lee Baker的答案。
Lance Cleveland

44

更改选择输入的值或调整选定的属性可能会覆盖DOM元素的默认selectedOptions属性,从而导致该元素可能无法以调用了reset事件的形式正确重置。

使用jQuery的prop方法清除并设置所需的选项:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
完善。我有级联的下拉菜单。当用户选择父选项2然后子选项3时,我不希望它“坚持”下去。换句话说,用户然后选择父#1,然后重新选择父#2。发生这种情况时,我希望子菜单重置为第一个选项(在我的情况下为“ Any”)。此处的所有其他解决方案均无法在Firefox v19和Linux上的Chrome上运行。
Lance Cleveland

33
$("#target")[0].selectedIndex = 0;

1
如果下拉列表中有一个预选项目,则此功能将无效。有关详细信息,请参见我对所选答案的评论。
Lance Cleveland

21

认为一点很微妙我发现有关票数最高的答案的是,即使他们正确地更改了选定的值,他们也不会更新用户看到的元素(只有当他们单击小部件时,他们才会在更新的元素)。

将.change()调用链接到最后也将更新UI小部件。

$("#target").val($("#target option:first").val()).change();

(请注意,我在使用jQuery Mobile和Chrome桌面上的一个框时注意到了这一点,因此并非到处都是这种情况)。


将.change()调用链接到最后也将更新UI小部件。
codemirror17年

17

如果禁用了选项,则可以添加not([disabled])以防止选择它们,从而导致以下结果:

$("#target option:not([disabled]):first").attr('selected','selected')

1
关于禁用选项的要点。不错,除了给出的答案!
兰斯·克利夫兰

16

重置值(针对多个选定元素)的另一种方法可能是:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

4
+1实际上是一个很好的答案,但您可以针对问题域使其更具体;而不是$("selector")你可以只写$('#target')
杰克


7
$('#newType option:first').prop('selected', true);

仅当没有已选择的选项时,此方法才有效。请参阅James Lee Baker的答案。
Webars

6

我发现,如果已经有selected属性,则仅将attr selected设置为无效。我现在使用的代码将首先取消设置所选属性,然后选择第一个选项。

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

这很好用,与其他地方对此问题的詹姆斯·李·贝克(James Lee Baker)的回答非常相似。我喜欢option:selected和option:first的其他答案,因为option:first的执行(在计算方式上)可能比find()更快。
Lance Cleveland

5

尽管可能不需要每个功能...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

为我工作。


5

这是我的方法:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
这很好用,与其他地方对此问题的詹姆斯·李·贝克(James Lee Baker)的回答非常相似。我喜欢option:selected和option:first的其他答案,因为option:first的执行(在计算方式上)可能比find()更快。
兰斯·克利夫兰

2

它仅在最后使用trigger('change')对我有用,像这样:

$("#target option:first").attr('selected','selected').trigger('change');

2

如果您要使用第一个选项作为默认值,例如

<select>
    <option value="">Please select an option below</option>
    ...

那么您可以使用:

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

很好,很简单。



1

在James Lee Baker的回复的背面,我更喜欢这种解决方案,因为它消除了对浏览器支持:first:selected的依赖。

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

对我来说,只有在添加以下代码后,它才起作用:

.change();

对我来说,只有在添加以下代码时它才起作用:当我想“重置”表单时,即选择所有表单选择中的所有第一个选项时,我使用了以下代码:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

采用:

$("#selectbox option:first").val()

请在此JSFiddle中找到简单的工作。


15、25或带有特定文字的位置怎么样?:D
MarceloAgimóvel18年

调用.val()仅获取列表中第一个选项的值。实际上,它并没有像原始问题中那样选择(选择)第一个选项。
Funka,

1

对我来说,只有当我添加以下代码行时,它才起作用

$('#target').val($('#target').find("option:first").val());


0

如果要存储select元素的jQuery对象:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

使用jQuery和ECMAScript 6来检查这种最佳方法:

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});


0

$('select#id').val($('#id option')[index].value)

用特定的选择标记ID 替换ID,并用您要选择的特定元素替换索引

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

因此,在这里进行第一个元素选择时,我将使用以下代码:

$('select#ddlState').val($('#ddlState option')[0].value)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.