1132

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

我有以下 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>

我需要选择带有 value 的选项val2。如何才能做到这一点?

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

4

26 回答 26

1793

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

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

查看这个jQuery 方法

注意:上面的代码不会触发更改事件。为了完全兼容,您需要这样称呼它:

$("div.id_100 select").val("val2").change();
于 2013-06-07T08:49:48.027 回答
508

要选择值为“val2”的选项:

$('.id_100 option[value=val2]').attr('selected','selected');
于 2012-11-12T12:17:20.977 回答
413

选择值后使用change()事件。从文档:

如果该字段在内容未更改的情况下失去焦点,则不会触发该事件。要手动触发事件,请.change()不带参数应用:

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

更多信息在.change()

于 2015-10-21T06:22:40.273 回答
64

首先取消全选并过滤可选选项:

$('.id_100 option')
     .removeAttr('selected')
     .filter('[value=val1]')
         .attr('selected', true)
于 2012-11-12T12:20:20.443 回答
44
<select name="contribution_status_id" id="contribution_status_id" class="form-select">
    <option value="1">Completed</option>
    <option value="2">Pending</option>
    <option value="3">Cancelled</option>
    <option value="4">Failed</option>
    <option value="5">In Progress</option>
    <option value="6">Overdue</option>
    <option value="7">Refunded</option>

按值设置为待处理状态

   $('#contribution_status_id').val("2");
于 2013-12-05T17:27:27.037 回答
38

对我来说,以下工作完成了

$("div.id_100").val("val2").change();
于 2016-07-27T13:27:55.063 回答
29

我认为最简单的方法是选择设置 val(),但您可以检查以下内容。请参阅如何在 jQuery 中处理选择和选项标签?有关选项的更多详细信息。

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

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

未优化,但以下逻辑在某些情况下也很有用。

$('.id_100 option').each(function() {
    if($(this).val() == 'val2') {
        $(this).prop("selected", true);
    }
});
于 2013-09-07T22:40:49.160 回答
26

最好的方法是这样的:

$(`#YourSelect option[value='${YourValue}']`).prop('selected', true);
于 2019-03-11T17:55:54.407 回答
20

一个简单的答案是,在 html

<select name="ukuran" id="idUkuran">
    <option value="1000">pilih ukuran</option>
    <option value="11">M</option>
    <option value="12">L</option>
    <option value="13">XL</option>
</select>

在 jquery 上,通过按钮或其他方式调用以下函数

$('#idUkuran').val(11).change();

它简单且 100% 有效,因为它取自我的工作...... :) 希望它的帮助..

于 2017-12-09T17:13:32.620 回答
19

您可以使用不同的方法来实现这一点:(
请记住,如果要操作一个元素,最好给它一个 id 或类,而不是让它的父元素一个 id 或类)。
在这里,由于 div 有一个类来定位其中的选择,代码将是:

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

或者

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

如果该类将被赋予选择自身,则代码将是:

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

或者

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

或者

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

要动态传递值,代码将是:
valu="val2";

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

如果元素是通过 ajax 添加的,则必须为元素提供“id”并使用
window.document.getElementById 否则,您必须为元素提供“class”并使用
window.document.getElementById

您还可以通过它的索引号选择选择元素的值。
如果您为您的选择元素提供了 ID,则代码将是:

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

请记住,当您如上所述更改选择值时,不会调用更改方法。
即,如果您编写了代码来更改选择,则上述方法将更改选择值但不会触发更改。
要触发更改功能,您必须在最后添加 .change() 。所以代码将是:

$("#select_id").val("val2").change();
于 2020-08-17T04:59:24.350 回答
18

您可以使用属性选择器选择任何属性及其值[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);
于 2012-11-12T12:22:16.320 回答
18

没有理由过度考虑这一点,您所做的只是访问和设置属性。就是这样。

好的,一些基本的 dom: 如果你是直接用 JavaScript 做的,你会这样:

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

但是你不是用直接的 JavaScript 来做的,你是用 jQuery 做的。在 jQuery 中,你想使用 .prop() 函数来设置一个属性,所以你可以这样做:

$("#my_stuff").prop('selectedIndex', 4);

无论如何,只要确保您的 id 是唯一的。否则,你会用头撞墙,想知道为什么这不起作用。

于 2018-03-03T09:41:03.363 回答
13

最简单的方法是:

HTML

<select name="dept">
   <option value="">Which department does this doctor belong to?</option>
   <option value="1">Orthopaedics</option>
   <option value="2">Pathology</option>
   <option value="3">ENT</option>
</select>

jQuery

$('select[name="dept"]').val('3');

输出:这将激活ENT

于 2015-12-02T07:23:22.437 回答
12

最好change()在设置选择值后使用。

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

通过这样做,代码将接近于更改用户选择,解释包含在JS Fiddle中:

JS小提琴

于 2017-06-06T08:56:23.550 回答
12

$('#graphtype option[value=""]').prop("selected", true);

这很好#graphtype用,选择标签的 id 在哪里。

示例选择标签:

 <select name="site" id="site" class="form-control" onchange="getgraph1(this.options[this.selectedIndex].value);">
    <option value="" selected>Site</option> 
    <option value="sitea">SiteA</option>
    <option value="siteb">SiteB</option>
  </select>
于 2018-01-16T06:51:27.787 回答
8

采用:

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

这对我有用。我正在使用此代码来解析fancybox 更新表单中的值,而我来自 app.js 的完整来源是:

jQuery(".fancybox-btn-upd").click(function(){
    var ebid = jQuery(this).val();

    jQuery.ajax({
        type: "POST",
        url: js_base_url+"manajemen_cms/get_ebook_data",
        data: {ebookid:ebid},
        success: function(transport){
            var re = jQuery.parseJSON(transport);
            jQuery("#upd-kategori option[value="+re['kategori']+"]").attr('selected',true);
            document.getElementById("upd-nama").setAttribute('value',re['judul']);
            document.getElementById("upd-penerbit").setAttribute('value',re['penerbit']);
            document.getElementById("upd-tahun").setAttribute('value',re['terbit']);
            document.getElementById("upd-halaman").setAttribute('value',re['halaman']);
            document.getElementById("upd-bahasa").setAttribute('value',re['bahasa']);

            var content = jQuery("#fancybox-form-upd").html();
            jQuery.fancybox({
                type: 'ajax',
                prevEffect: 'none',
                nextEffect: 'none',
                closeBtn: true,
                content: content,
                helpers: {
                    title: {
                        type: 'inside'
                    }
                }
            });
        }
    });
});

我的PHP代码是:

function get_ebook_data()
{
    $ebkid = $this->input->post('ebookid');
    $rs = $this->mod_manajemen->get_ebook_detail($ebkid);
    $hasil['id'] = $ebkid;
    foreach ($rs as $row) {
        $hasil['judul'] = $row->ebook_judul;
        $hasil['kategori'] = $row->ebook_cat_id;
        $hasil['penerbit'] = $row->ebook_penerbit;
        $hasil['terbit'] = $row->ebook_terbit;
        $hasil['halaman'] = $row->ebook_halaman;
        $hasil['bahasa'] = $row->ebook_bahasa;
        $hasil['format'] = $row->ebook_format;
    }
    $this->output->set_output(json_encode($hasil));
}
于 2014-03-16T08:42:25.500 回答
8
var opt = new Option(name, id);
$("#selectboxName").append(opt);
opt.setAttribute("selected","selected");
于 2014-12-15T07:25:23.153 回答
7

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

$('select#ddlCountry option').each(function () {
    if ($(this).text().toLowerCase() == co.toLowerCase()) {
        $(this).prop('selected','selected');
        return;
    }
});
于 2016-09-08T04:40:50.273 回答
5

这个对我有用

$("#id_100").val("val2");
于 2020-04-06T12:55:19.930 回答
4

这肯定适用于Select Control

$('select#ddlCountry option').each(function () {
if ($(this).text().toLowerCase() == co.toLowerCase()) {
    this.selected = true;
    return;
} });
于 2015-11-26T05:02:28.797 回答
3

试试这个。简单而有效的 javaScript + jQuery 致命组合。

选择组件:

<select id="YourSelectComponentID">
            <option value="0">Apple</option>
            <option value="2">Banana</option>
            <option value="3">Cat</option>
            <option value="4">Dolphin</option>
</select>

选择:

document.getElementById("YourSelectComponentID").value = 4;

现在您的选项 4 将被选中。您可以这样做,默认情况下选择启动时的值。

$(function(){
   document.getElementById("YourSelectComponentID").value = 4;
});

或创建一个简单的函数将行放入其中并在 anyEvent 上调用该函数以选择选项

jQuery + javaScript 的混合具有魔力......

于 2017-11-20T17:13:10.000 回答
3

是旧帖子,但这是一个类似于 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');

Reson 为什么使用它是因为您将选定的语义更改为跨浏览器支持的 DOM,并且还会触发您可以捕获它的更改。

基本上是人体动作模拟。

于 2018-01-16T09:58:59.843 回答
3

这里有很多解决方案可以更改所选值,但没有一个对我有用,因为我的挑战与 OP 略有不同。我需要根据此值过滤另一个选择下拉列表。

大多数人过去常常$("div.id_100").val("val2").change();让它为他们工作。我不得不将其稍微修改为$("div#idOfDiv select").val("val2").trigger("change").

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

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

我希望这可以帮助有同样挑战的人!

于 2021-03-08T01:24:42.627 回答
1

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

在 jQuery 中,这个解决方案对我有用。

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

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

希望这可以帮助。

于 2019-05-04T19:25:12.840 回答
1

当值是 ID 而文本是代码时,我遇到了一个问题。您无法使用代码设置值,但您无法直接访问 ID。

var value;

$("#selectorId > option").each(function () {
  if ("SOMECODE" === $(this).text()) {
    value = $(this).val();
  }
});

//Do work here
于 2019-08-14T17:31:24.470 回答
0

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

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>的元素。选择第一个(使用)并使用事件options[0]更新<select>元素。change

于 2021-05-20T17:05:14.593 回答