我有一个选择字段,其中有一些选项。现在我需要用jQuery选择其中一个选项。但是,当我只知道必须选择的选项的值时,我该怎么做呢?

我有以下HTML:

<div class="id_100">
  <select>
    <option value="val1">Val 1</option>
    <option value="val2">Val 2</option>
    <option value="val3">Val 3</option>
  </select>
</div>

我需要选择值为val2的选项。如何做到这一点呢?

这是一个演示页面: http://jsfiddle.net/9Stxb/


当前回答

先取消所有选择,然后过滤可选选项:

$('.id_100 option')
     .removeAttr('selected')
     .filter('[value=val1]')
         .attr('selected', true)

其他回答

先取消所有选择,然后过滤可选选项:

$('.id_100 option')
     .removeAttr('selected')
     .filter('[value=val1]')
         .attr('selected', true)

当控件是动态创建的,而不是在静态HTML页面中时,选择下拉控件没有动态更改,这似乎是一个问题。

在jQuery中,这个解决方案为我工作。

$('#editAddMake').val(result.data.make_id);
$('#editAddMake').selectmenu('refresh');

就像附录一样,第一行代码没有第二行,实际上是透明的,在设置索引后检索所选索引是正确的,如果您实际单击控件,它将显示正确的项目,但这并没有反映在控件的顶部标签中。

感谢傻瓜的回答:

在我的例子中,我需要使用的组合

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

$('.id_100').val("val1").change(); // I need to set the same value here for my next form submit.

为下一次表单提交设置正确的值。当使用这个时,即使我有另一个on change事件有界,它也不会给出一个无限循环。

你可以用不同的方法来实现这一点(记住,如果要操作一个元素,最好给它一个id或类,而不是让它的父元素是一个id或类):

在这里,由于div有一个类来针对它内部的select,代码将是:

$("div.id_100 select").val("val2");

or

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

如果给类选择自己,代码将是:

$(".id_100").val("val2");

or

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

or

$('.id_100 option')
    .removeAttr('selected')
    .filter('[value=val1]')
    .attr('selected', true);

要动态传递值,代码将是:

值=“val2”;

$("div.id_100 select").val(valu);
$("div.id_100 > select > option[value=" + valu + "]").prop("selected",true);

如果元素是通过Ajax添加的,你必须给你的元素'id',并使用:

window.document.getElementById

否则,你将不得不给你的元素和使用的“类”

window.document.getElementById

您还可以通过索引号来选择select元素的值。

如果你给了你的选择元素ID,代码将是:

window.document.getElementById('select_element').selectedIndex = 4;

记住,当您像上面所说的那样更改选择值时,不会调用change方法。

也就是说,如果你写了一些代码来改变选择,上面的方法会改变选择值,但不会触发改变。

要触发change函数,必须在末尾添加.change()。

所以代码是:

$("#select_id").val("val2").change();

.attr()有时在旧版本的jQuery中不起作用,但你可以使用.prop():

$('select#ddlCountry option').each(function () {
    if ($(this).text().toLowerCase() == co.toLowerCase()) {
        $(this).prop('selected','selected');
        return;
    }
});