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


当前回答

对我来说,下面的工作就完成了

$("div.id_100").val("val2").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();

选择值为'val2'的选项:

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

这里有很多解决方案来改变所选的值,但没有一个对我有用,因为我的挑战与操作略有不同。我需要根据这个值过滤另一个选择下拉。

大多数人使用$("div.id_100").val("val2").change();让它为他们工作。我不得不稍微修改这个$("div#idOfDiv select").val("val2").trigger("change")。

这还不够,我还必须确保等待文档加载。我的完整代码如下所示:

$(document).ready(function() {
    $("div#idOfDiv select").val("val2").trigger("change");
});

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

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();