我有一个选择框:
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
<option value="3">Number 3</option>
<option value="4">Number 4</option>
<option value="5">Number 5</option>
<option value="6">Number 6</option>
<option value="7">Number 7</option>
</select>
我想根据选定的索引将其中一个选项设置为“已选择”。
例如,如果我想设置“3号”,我正在尝试这个:
$('#selectBox')[3].attr('selected', 'selected');
但这不起作用。如何使用jQuery基于它的索引设置选项?
谢谢!
答案 0 :(得分:436)
注意:answer取决于jQuery 1.6.1 +
$('#selectBox :nth-child(4)').prop('selected', true); // To select via index
$('#selectBox option:eq(3)').prop('selected', true); // To select via value
感谢您的评论,.get
将无效,因为它返回的是DOM元素,而不是jQuery元素。请注意,如果您愿意,也可以在选择器之外使用.eq
功能。
$('#selectBox option').eq(3).prop('selected', true);
如果您想使用值,而不是依赖于选择特定的索引,您也可以更简洁/可读:
$("#selectBox").val("3");
注意: .val(3)
适用于此示例,但非数字值必须是字符串,因此我选择了一个字符串以保持一致性。
(例如<option value="hello">Number3</option>
要求您使用.val("hello")
)
答案 1 :(得分:114)
这也可能有用,所以我想我会在这里添加它。
如果您想根据商品的价值而不是该商品的索引选择价值,那么您可以执行以下操作:
您的选择列表:
<select id="selectBox">
<option value="A">Number 0</option>
<option value="B">Number 1</option>
<option value="C">Number 2</option>
<option value="D">Number 3</option>
<option value="E">Number 4</option>
<option value="F">Number 5</option>
<option value="G">Number 6</option>
<option value="H">Number 7</option>
</select>
jquery:
<击> 撞击>
<击>$('#selectBox option[value=C]').attr('selected', 'selected');
击> <击> 撞击>
$('#selectBox option[value=C]').prop('selected', true);
现在所选项目为“2号”。
答案 2 :(得分:63)
请改为尝试:
$("#selectBox").val(3);
另外,看看这是否对您有所帮助:
http://elegantcode.com/2009/07/01/jquery-playing-with-select-dropdownlistcombobox/
答案 3 :(得分:47)
更简单:
$('#selectBox option')[3].selected = true;
答案 4 :(得分:16)
# Set element with index
$("#select option:eq(2)").attr("selected", "selected");
# Set element by text
$("#select").val("option Text").attr("selected", "selected");
如果要选择最佳方式进行设置选择,可以使用
$('#select option').removeAttr('selected');
用于删除之前的选择。
# Set element by value
$("#select").val("2");
# Get selected text
$("#select").children("option:selected").text(); # use attr() for get attributes
$("#select option:selected").text(); # use attr() for get attributes
# Get selected value
$("#select option:selected").val();
$("#select").children("option:selected").val();
$("#select option:selected").prevAll().size();
$("option:selected",this).val();
# Get selected index
$("#select option:selected").index();
$("#select option").index($("#select option:selected"));
# Select First Option
$("#select option:first");
# Select Last Item
$("#select option:last").remove();
# Replace item with new one
$("#select option:eq(1)").replaceWith("<option value='2'>new option</option>");
# Remove an item
$("#select option:eq(0)").remove();
答案 5 :(得分:11)
重要的是要理解,val()
元素的select
会返回所选选项的值,但不会返回javascript中selectedIndex
的元素数。
要选择value="7"
选项,您只需使用:
$('#selectBox').val(7); //this will select the option with value 7.
要取消选择该选项,请使用空数组:
$('#selectBox').val([]); //this is the best way to deselect the options
当然,您可以选择多个选项*:
$('#selectBox').val([1,4,7]); //will select options with values 1,4 and 7
*但是,要选择多个选项,您的<select>
元素必须具有MULTIPLE
属性,否则无效。
答案 6 :(得分:10)
我总是遇到道具问题(&#39;选择&#39;),以下一直对我有用:
//first remove the current value
$("#selectBox").children().removeAttr("selected");
$("#selectBox").children().eq(index).attr('selected', 'selected');
答案 7 :(得分:8)
试试这个:
$('select#mySelect').prop('selectedIndex', optionIndex);
最终,触发.change事件:
$('select#mySelect').prop('selectedIndex', optionIndex).change();
答案 8 :(得分:6)
希望这可以帮助太多
$('#selectBox option[value="3"]').attr('selected', true);
答案 9 :(得分:4)
在1.4.4中你会收到一个错误: $(“#selectBox option”)[3] .attr不是函数
这有效:$('#name option:eq(idx)').attr('selected', true);
其中#name
是选择ID,idx
是您要选择的选项值。
答案 10 :(得分:4)
为了澄清Marc和John Kugelman的答案,你可以使用:
$('#selectBox option').eq(3).attr('selected', 'selected')
如果以指定的方式使用 get()
将无效,因为它获取DOM对象,而不是jQuery对象,因此以下解决方案将无效:
$('#selectBox option').get(3).attr('selected', 'selected')
eq()
将jQuery设置为具有指定索引的元素的过滤器。它比$($('#selectBox option').get(3))
更清晰。它不是那么高效。 $($('#selectBox option')[3])
效率更高(请参阅test case)。
但实际上并不需要jQuery对象。这样就可以了:
$('#selectBox option')[3].selected = true;
属性“selected”不是指定所选单选按钮的方式(至少在Firefox和Chrome中)。使用“已检查”属性:
$('#selectBox option')[3].checked = true;
复选框也是如此。
答案 11 :(得分:4)
答案 12 :(得分:4)
注意:
$('#selectBox option')[3].attr('selected', 'selected')
是不正确的,数组deference会获取dom对象,而不是jquery对象,因此它会因TypeError而失败,例如在FF中:“$('#selectBox option')[3] .attr()不是功能。“
答案 13 :(得分:4)
纯javascript selectedIndex属性是正确的方法,因为它是纯粹的javascript并且可以跨浏览器工作:
$('#selectBox')[0].selectedIndex=4;
Here is a jsfiddle demo有两个下拉列表,使用一个来设置另一个:
<select onchange="$('#selectBox')[0].selectedIndex=this.selectedIndex">
<option>0</option>
<option>1</option>
<option>2</option>
</select>
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
</select>
如果你想要的是选项标签(here is the fiddle)上的“selected”属性,你也可以在更改selectedIndex之前调用它:
$('#selectBox option').removeAttr('selected')
.eq(this.selectedIndex).attr('selected','selected');
答案 14 :(得分:2)
//funcion para seleccionar por el text del select
var text = '';
var canal = ($("#name_canal").val()).split(' ');
$('#id_empresa option').each(function(i, option) {
text = $('#id_empresa option:eq('+i+')').text();
if(text.toLowerCase() == canal[0].toLowerCase()){
$('#id_empresa option:eq('+i+')').attr('selected', true);
}
});
答案 15 :(得分:1)
我经常使用触发器(“更改”)使其工作
$('#selectBox option:eq(position_index)').prop('selected', true).trigger('change');
id为select = selectA1并且position_index = 0(select中的第一个选项)的示例:
$('#selectA1 option:eq(0)').prop('selected', true).trigger('change');
答案 16 :(得分:1)
根据选择列表中的值选择项目(特别是如果选项值中有空格或奇怪的字符),只需执行以下操作:
$("#SelectList option").each(function () {
if ($(this).val() == "1:00 PM")
$(this).attr('selected', 'selected');
});
此外,如果您有一个下拉菜单(而不是多选),您可能需要执行break;
,这样就不会让第一个值被覆盖。
答案 17 :(得分:1)
如果您的选择框是倍数,您也可以初始化多个值:
$('#selectBox').val(['A', 'B', 'C']);
答案 18 :(得分:1)
我遇到了同样的问题。 首先,您需要完成事件(即首先发生的事件)。
例如:
第一个事件正在生成带选项的选择框。
第二个事件正在使用任何函数(如val()等)选择默认选项。
您应该确保在第一个事件之后发生第二个事件。
要实现这一目标需要两个函数,可以说 generateSelectbox()(用于生成选择框)和 selectDefaultOption()
您需要确保只有在执行 generateSelectbox()
后才能调用 selectDefaultOption()答案 19 :(得分:1)
我需要一个在js文件中没有硬编码值的解决方案;使用selectedIndex
。大多数给定的解决方案都失败了。这似乎适用于FF10和IE8(可以在其他版本中测试其他人)
$("#selectBox").get(0).selectedIndex = 1;
答案 20 :(得分:1)
如果您只想根据项目的特定属性选择项目,则[prop = val]类型的jQuery选项将获得该项目。现在我不关心索引我只是想要项目的值。
$('#mySelect options[value=3]).attr('selected', 'selected');
答案 21 :(得分:1)
$('#selectBox option').get(3).attr('selected', 'selected')
使用上述内容时,我不断收到webkit(Chrome)中的错误说:
“未捕获的TypeError:对象#没有方法'attr'”
此语法可以阻止这些错误。
$($('#selectBox option').get(3)).attr('selected', 'selected');
答案 22 :(得分:0)
您可以动态设置selectoption变量值,也可以选择选项。您可以尝试以下代码
代码:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
$(function(){
$('#allcheck').click(function(){
// $('#select_option').val([1,2,5]);also can use multi selectbox
// $('#select_option').val(1);
var selectoption=3;
$("#selectBox>option[value="+selectoption+"]").attr('selected', 'selected');
});
});
HTML CODE:
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
<option value="3">Number 3</option>
<option value="4">Number 4</option>
<option value="5">Number 5</option>
<option value="6">Number 6</option>
<option value="7">Number 7</option>
</select> <br>
<strong>Select <a style="cursor:pointer;" id="allcheck">click for select option</a></strong>
答案 23 :(得分:0)
花了太多时间后,这个对我有用。
$("#selectbox")[0].selectedIndex = 1;
答案 24 :(得分:-2)
不久:
$("#selectBox").attr("selectedIndex",index)
其中index是选定的索引为整数。