我有一个选择字段,其中有一些选项。现在我需要用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/


当前回答

我需要选择一个选项,但两个选项可能具有相同的值。 这纯粹是为了视觉(前端)的差异。 你可以选择一个选项(即使两个值相同),如下所示:

let options = $('#id_100 option')
options.prop('selected', false)   // Deselect all currently selected ones
let option = $(options[0])        // Select option from the list
option.prop('selected', true)
option.parent().change()          // Find the <select> element and call the change() event.

这将取消当前选中的所有<option>元素。选择第一个元素(使用选项[0]),并使用change事件更新<select>元素。

其他回答

我已经准备了一个小的JQuery扩展,删除所有不必要的选项和隐藏所选的选项,用户只看到一个值在选择字段

$.prototype.makeReadOnly = function (canClick = false) {
    $(this).each(function () {
        $(this).readonly = true;
        if ($(this).is("select")) {
            if(!canClick) $(this).mousedown(function () { event.preventDefault(); }).keydown(function () { event.preventDefault(); });
            $(this).find('option:not(:selected)').remove();
            $(this).find('option').hide();
        }
    });
}

然后你可以让所有的选择都是只读的

$("select").makeReadOnly();

或者只选择特定的只读类

$("select.read-only").makeReadOnly();

您可以使用属性选择器[attributename=optionalvalue]选择任何属性及其值,因此在您的情况下,您可以选择该选项并设置所选属性。

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

其中value是您希望通过的值。

如果您需要删除任何先前选择的值,就像多次使用这种情况一样,您需要稍微更改它,以便首先删除所选的属性

$("div.id_100 option:selected").prop("selected",false);
$("div.id_100 option[value=" + value + "]")
        .prop("selected",true);

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

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

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

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

有一个更简单的方法,不需要你进入选项标签:

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

看看这个jQuery方法。

注意:上面的代码不会触发变更事件。 为了完全兼容,你需要这样调用它:

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

下面是一个类似jQuery插件的简单函数。

    $.fn.selectOption = function(val){
        this.val(val)
        .find('option')
        .removeAttr('selected')
        .parent()
        .find('option[value="'+ val +'"]')
        .attr('selected', 'selected')
        .parent()
        .trigger('change');

        return this;
    };

你可以简单地做这样的事情:

$('.id_100').selectOption('val2');

使用这个的原因是因为您将所选语句更改为跨浏览器支持的DOM,也会触发更改,以便您可以捕获它。

它基本上是一种人类动作模拟。