设置选择框的选定选项

我想设置一个选项,之前选择显示在页面加载。我尝试了下面的代码:

$("#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>

但这并不奏效。什么好主意吗?

862932 次浏览

这肯定能起作用。这是一个演示。确保你已经把你的代码放在$(document).ready中:

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

这很好。看这个小提琴:http://jsfiddle.net/kveAL/

有可能你需要在$(document).ready()处理程序中声明你的jQuery ?

另外,是否可能有两个具有相同ID的元素?

$(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
});

我有一个问题,其中的值没有设置,因为在调用之前的语法错误。

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

在调用之前检查语法错误。

// 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');
});
$(function() {
$("#demo").val('hello');
});

$('#gate').val('Gateway 2').prop('selected', true);

我的问题

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);

除了@icksde和@Korah(谢谢两位!)

当构建选项与AJAX文件。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");
});

我发现使用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输入

<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);
  $("#form-field").val("5").trigger("change");

这是另一种选择:

$('.id_100 option[value=val2]').prop('selected', true);

我也有同样的问题。

解决方法:添加刷新。

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

我知道有几个迭代的答案,但现在这不需要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>

有些情况可能是

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

我知道这是一个公认的答案,但在阅读答案的回复时,我看到了一些我可以澄清的东西,这些东西可能会帮助其他人解决在值更改后没有触发事件的问题。

这将在下拉菜单中选择值:

$("#gate").val("gateway_2")

如果这个选择元素使用JQueryUI或其他JQuery包装器,使用包装器的刷新方法来更新UI,以显示值已被选中。下面的例子是针对JQueryUI的,但是你必须查看你正在使用的包装器的文档,以确定正确的刷新方法:

$("#gate").selectmenu("refresh");

如果需要触发一个事件,例如更改事件,则必须手动触发该事件,因为更改值不会触发该事件。你需要触发的事件取决于事件是如何创建的:

如果事件是用JQuery创建的,即$("#gate").on("change",function(){})然后使用下面的方法触发事件:

$("#gate").change();

如果事件是使用标准JavaScript事件创建的,则使用以下方法触发事件:

var JSElem = $("#gate")[0];
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
JSElem.dispatchEvent(evt);
} else {
JSElem.fireEvent("onchange");
}

$(document).ready(function() {
$('#selectBoxId option[value="val2"]').prop('selected', true);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="selectBoxId">
<option value="val1">Option1</option>
<option value="val2">Option2</option>
<option value="val3">Option3</option>
</select>