设置选择框的选择选项


352

我想设置一个先前选择的要在页面加载时显示的选项。我用以下代码尝试了它:

$("#gate").val('Gateway 2');

<select id="gate">
    <option value='null'>- choose -</option>
    <option value='gateway_1'>Gateway 1</option>
    <option value='gateway_2'>Gateway 2</option>
</select>

但这是行不通的。有任何想法吗?


10
实际上,这就是它的工作方式,确定要在document.ready()中设置值吗?也许在选择框尚未准备好时执行代码。
Morph

Answers:


495

这绝对应该工作。这是一个演示。确保已将代码放入$(document).ready

$(function() {
    $("#gate").val('gateway_2');
});

4
好的,当我下拉列表时,它会突出显示,但不会显示为列表中的第一个元素
Upvote 2011年

2
嗯,我在文档就绪功能中声明了它……谢谢!
Upvote 2011年

7
不如将属性“已选择”设置为“已选择”。
Adal

6
@Adal为什么这不如将'selected'属性设置为'selected'一样好?
肖恩

26
以防万一其他人感到奇怪,'Gateway 2'传递给函数的内容valvalueselect选项的属性值匹配,而不是其文本。请参阅此JSFiddle,它是Darin演示的非常精心编辑的版本,以说明我的意思。
肯尼·埃维特

166
$(document).ready(function() {
    $("#gate option[value='Gateway 2']").prop('selected', true);
    // you need to specify id of combo to set right combo, if more than one combo
});


15

我发现使用jQuery .val()方法有一个明显的缺点。

<select id="gate"></select>
$("#gate").val("Gateway 2");

如果此选择框(或任何其他输入对象)在表单中,并且表单中使用了重置按钮,则单击重置按钮时,设置值将被清除并且不会重置为您期望的初始值。

这似乎最适合我。

对于选择框

<select id="gate"></select>
$("#gate option[value='Gateway 2']").attr("selected", true);

对于文字输入

<input type="text" id="gate" />
$("#gate").attr("value", "your desired value")

对于文本区域输入

<textarea id="gate"></textarea>
$("#gate").html("your desired value")

对于复选框

<input type="checkbox" id="gate" />
$("#gate option[value='Gateway 2']").attr("checked", true);

对于单选按钮

<input type="radio" id="gate" value="this"/> or <input type="radio" id="gate" value="that"/>
$("#gate[value='this']").attr("checked", true);

12
  $("#form-field").val("5").trigger("change");

1
如果您包括一些与此相关的信息,那将很好。如果您有代码在监视选择内容的更改,那么这是应该如何执行此操作的一个很好的示例。
sean.boyer



6

我有同样的问题。

解决方案:添加刷新。

$("#gate").val('Gateway 2');
$("#gate").selectmenu('refresh');

3
这仅适用于
jqueryui selectmenu

3

我知道答案有好几次迭代,但是现在不需要jquery或任何其他外部库,只需执行以下操作就可以轻松完成。

document.querySelector("#gate option[value='Gateway 2']").setAttribute('selected',true);
<select id="gate">
    <option value='null'>- choose -</option>
    <option value='Gateway 1'>Gateway 1</option>
    <option value='Gateway 2'>Gateway 2</option>
</select>


很好的解决方案。但看起来并不会从先前选择的选项中删除选择的属性
Systems Rebooter

3

有些情况可能是

$('#gate option[value='+data.Gateway2+']').attr('selected', true);

1

我的问题

get_courses(); //// To load the course list
$("#course").val(course); //// Setting default value of the list

我遇到过同样的问题 。与您的代码唯一的不同在于,我是通过ajax调用加载选择框的,而一旦执行了ajax调用,我便设置了选择框的默认值

解决方案

get_courses();
   setTimeout(function() {
     $("#course").val(course);
  }, 10);

1
您正确地分析了问题,但是解决方案不好并且很脆弱。您必须使用附加到ajax调用的回调函数
icksde

-1

我有一个问题,即由于调用之前的语法错误,未设置该值。

$("#someId").value(33); //script bailed here without showing any errors Note: .value instead of .val
$("#gate").val('Gateway 2'); //this line didn't work.

调用前检查语法错误。


4
提醒检查语法错误虽然很有用,但这不是答案。
Shot弹枪忍者


-2
// Make option have a "selected" attribute using jQuery

var yourValue = "Gateway 2";

$("#gate").find('option').each(function( i, opt ) {
    if( opt.value === yourValue ) 
        $(opt).attr('selected', 'selected');
});

1
这甚至会循环经过选定的值,这是无效的
Daniel Nuriyev 2014年

.attr()早在此答案发布之前,Plus 就是这样做的错误方法。
Auspex

-2

@icksde和@Korah的附加内容(两者均是如此!)

使用AJAX 构建选项时可能会在构建列表之前触发document.ready,因此

这不行

$(document).ready(function() {
    $("#gate").val('Gateway 2');
});

这确实

超时确实有效,但正如@icksde所说的那样,它很脆弱(我实际上确实需要20ms而不是10ms)。最好将其安装在AJAX函数中,如下所示:

$("#someObject").change(function() {
    $.get("website/page.php", {parameters}, function(data) {
        $("#gate").append("<option value='Gateway 2'">" + "Gateway 2" + "</option>");
        $("#gate").val('Gateway 2');
    }, "json");
});
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.