我有一个选择框:

<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?

谢谢!


当前回答

根据选择列表中的值选择项目(特别是如果选项值中有空格或奇怪的字符),只需这样做:

$("#SelectList option").each(function () {
    if ($(this).val() == "1:00 PM")
        $(this).attr('selected', 'selected');
});

此外,如果你有一个下拉菜单(而不是多选菜单),你可能需要暂停;这样就不会覆盖第一个找到的值。

其他回答

更简单:

$('#selectBox option')[3].selected = true;
$('#selectBox option').get(3).attr('selected', 'selected')

当使用上面的我一直在webkit (Chrome)的错误说:

“未捕获的类型错误:对象#没有方法'attr'”

此语法可以阻止这些错误。

$($('#selectBox  option').get(3)).attr('selected', 'selected');

:不久

$ (" # selectBox”)。attr(“selectedIndex index)

其中index是所选的整数索引。

我经常使用触发器(“改变”)来让它工作

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

纯javascript selectedIndex属性是正确的方法,因为它是纯javascript,可以跨浏览器工作:

$('#selectBox')[0].selectedIndex=4;

这是一个jsfiddle演示,有两个下拉列表,使用一个来设置另一个:

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

你也可以在改变selectedIndex之前调用它,如果你想要的是option标签上的“selected”属性(这里是fiddle):

$('#selectBox option').removeAttr('selected')
   .eq(this.selectedIndex).attr('selected','selected');