你如何在jQuery的SELECT元素中select一个特定的选项?
如果您知道索引,值或文本。 另外如果你没有一个ID作为直接参考。
这 , 这是所有有用的答案。
示例标记
<div class="selDiv"> <select class="opts"> <option selected value="DEFAULT">Default</option> <option value="SEL1">Selection 1</option> <option value="SEL2">Selection 2</option> </select> </div>
通过值获取中间选项元素的select器是
$('.selDiv option[value="SEL1"]')
对于索引:
$('.selDiv option:eq(1)')
对于一个已知的文字:
$('.selDiv option:contains("Selection 1")')
编辑 :正如上面评论OP可能已经改变下拉选定的项目后。 在版本1.6及更高版本中,build议使用prop()方法:
$('.selDiv option:eq(1)').prop('selected', true)
在旧版本中:
$('.selDiv option:eq(1)').attr('selected', 'selected')
在Ryan的评论之后, EDIT2 。 “select10”上的匹配可能是不需要的。 我发现没有select匹配全文,但是一个filter工作:
$('.selDiv option') .filter(function(i, e) { return $(e).text() == "Selection 1"})
上述方法都没有提供我需要的解决scheme,所以我想我会提供什么为我工作。
$('#element option[value="no"]').attr("selected", "selected");
你可以使用val()
方法:
$('select').val('the_value');
按照价值, jQuery 1.7的工作是以下代码,试试这个:
$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
你可以命名select并使用这个:
$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);
它应该select你想要的选项。
$(elem).find('option[value="' + value + '"]').attr("selected", "selected");
回答我自己的问题的文件。 我相信有其他的方法来完成这个,但是这个工作,这个代码被testing。
<html> <head> <script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script> <script type="text/JavaScript"> $(function() { $(".update").bind("click", // bind the click event to a div function() { var selectOption = $('.selDiv').children('.opts') ; var _this = $(this).next().children(".opts") ; $(selectOption).find("option[index='0']").attr("selected","selected"); // $(selectOption).find("option[value='DEFAULT']").attr("selected","selected"); // $(selectOption).find("option[text='Default']").attr("selected","selected"); // $(_this).find("option[value='DEFAULT']").attr("selected","selected"); // $(_this).find("option[text='Default']").attr("selected","selected"); // $(_this).find("option[index='0']").attr("selected","selected"); }); // END Bind }); // End eventlistener </script> </head> <body> <div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div> <div class="selDiv"> <select class="opts"> <option selected value="DEFAULT">Default</option> <option value="SEL1">Selection 1</option> <option value="SEL2">Selection 2</option> </select> </div> </body> </html>
有很多方法可以做到这一点,但最重要的方法已经失去了val()
的参数的最佳答案和加载。 还有一些方法由于jQuery 1.6而改变,所以需要更新。
对于下面的例子,我将假设variables$select
是一个jQuery对象,指向所需的<select>
标签,例如通过以下方式:
var $select = $('.selDiv .opts');
注1 – 使用val()进行值匹配:
对于值匹配,使用val()
比使用属性select器简单得多: https : //jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
.val()
的setter版本通过设置具有相同value
的匹配option
的selected
属性在select
标签上实现,因此在所有现代浏览器上都可以正常工作。
注2 – 使用prop('selected',true):
如果要直接设置选项的选定状态,则可以使用具有boolean
参数的prop
(而不是attr
)(而不是selected
的文本值):
例如https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
注3 – 允许未知的值:
如果使用val()
select一个<option>
,但是val不匹配(可能会根据值的来源发生),那么select“nothing”, $select.val()
将返回null
。
所以,对于所示的示例,并为了健壮性,您可以使用像这样的https://jsfiddle.net/1250Ldqn/ :
var $select = $('.selDiv .opts'); $select.val("SEL2"); if ($select.val() == null) { $select.val("DEFAULT"); }
注4 – 确切的文字匹配:
如果你想通过确切的文字匹配,你可以使用function的filter
。 例如https://jsfiddle.net/yz7tu49b/2/ :
var $select = $('.selDiv .opts'); $select.children().filter(function(){ return this.text == "Selection 2"; }).prop('selected', true);
虽然如果你可能有额外的空白,你可能想添加一个修剪到检查中
return $.trim(this.text) == "some value to match";
注5 – 按索引匹配
如果你想匹配的索引只是索引的select的孩子,例如https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts'); var index = 2; $select.children()[index].selected = true;
虽然我倾向于避免直接的DOM属性,以支持jQuery时下,以防未来的代码,所以也可以做到https://jsfiddle.net/yz7tu49b/5/ :
var $select = $('.selDiv .opts'); var index = 2; $select.children().eq(index).prop('selected', true);
注6 – 使用change()来激发新的select
在所有上述情况下,变更事件不会触发。 这是通过devise,使您不会收到recursion更改事件。
要生成更改事件,如果需要,只需将.change()
调用添加到jQuery select
对象。 例如,第一个最简单的例子就是https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts'); $select.val("SEL2").change();
还有很多其他方法可以使用属性select器来查找元素,比如[value="SEL2"]
,但是您必须记住,与所有其他选项相比,属性select器相对较慢。
使用jQuery的2.1.4 ,我发现以下答案为我工作:
$('#MySelectionBox').val(123).change();
如果您有一个string值,请尝试以下操作:
$('#MySelectionBox').val("extra thing").change();
其他例子没有为我工作,所以这就是为什么我join这个答案。
我find了原始答案: https : //forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu
我使用这个,当我知道列表的索引。
$("#yourlist :nth(1)").prop("selected","selected").change();
这允许列表更改,并触发更改事件。 “:n(n)”从索引0开始计数
我会去: –
$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
对于jQuery的select,如果你发送属性function,需要更新select选项
$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected'); $('#editLocationCity').chosen().change(); $('#editLocationCity').trigger('liszt:updated');
/* This will reset your select box with "-- Please Select --" */ <script> $(document).ready(function() { $("#gate option[value='']").prop('selected', true); }); </script>
用于select触发设置select值:
$('select.opts').val('SEL1').change();
从范围设置选项:
$('.selDiv option[value="SEL1"]') .attr('selected', 'selected') .change();
此代码使用select器来查找带有条件的select对象,然后通过attr()
更改所选属性。
此外,我build议添加change()
事件后设置属性selected
,通过这样做代码将closures更改用户select。
$('select').val('the_value');
看起来是正确的解决scheme,如果你有数据表行,那么:
$row.find('#component').val('All');
如果你不想使用jQuery,你可以使用下面的代码:
document.getElementById("mySelect").selectedIndex = "2";
谢谢你的问题。 希望这段代码能为你工作。
var val = $("select.opts:visible option:selected ").val();
尝试这个
您只需使用select字段ID而不是#id(即。#select_name)
而不是选项值使用您的select选项值
<script> $(document).ready(function() { $("#id option[value='option value']").attr('selected',true); }); </script>