按值设置选择选项“已选择”


951

我有一个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>

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

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


对于下拉使用.VAL的单值( '5'),用于多重选择使用VAL([ '5', '4', '8'])充分演示freakyjolly.com/...
代码间谍

Answers:


1533

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

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

看看这个jQuery方法


18
这可能会导致FF中的错误(至少)出现在空的选择框中
Jonathan

21
问题的发布者以“我有一个带有某些选项的选择字段...”开头,因此该字段不为空,因此解决方案仍然正确。
pinghsien422'4

8
@JamesCazzetta发送一个数组为val: .val(["Multiple2", "Multiple3"])api.jquery.com/val/#val-value
scipilot

133
我不得不手动调用.val(x).change();来触发select的onChange事件,似乎设置val()不会触发它。
scipilot

16
注意:val()可能会设置选项中不存在的值。
丹尼尔(Daniel)

429

要选择值“ val2”的选项:

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

5
如果所需值可能是或不是选项,这是最好的解决方案,如果不是选项,则您不想进行更改。如果您使用.val()select并尝试选择一个不存在的值,它将取消选择所有内容。
Wally Altman 2014年

同意-这是最优雅的选择-明确明确。不确定“ prop”在所有情况下(浏览器)是否都能更好地工作。但这当然可以为您轻松查找。
Lee Fuller

4
另外,我使用$("select[name=foo] option[value=bar]).attr('selected','selected');过的方法也对我测试过的所有浏览器都有效。
Lee Fuller

1
我喜欢此答案胜于接受的答案,因为:element.outerHTML会以此更新,而它不会使用接受的答案。
HoldOffHunger

2
值得注意的是,如果选择下拉菜单已被隐藏,这将无法正常工作,因此在我的情况下,我使用的是select boxit插件,但尝试触发选择框更改,因此带有onchange处理函数的下拉菜单的原始代码仍将运行。只需更新新元素的代码,即selectboxit元素
chris c

331

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

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

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

有关更多信息,请参见.change()


22
这值得更多的赞扬,属于最高职位。它的正确方法,没有摆弄propattr等妥善progagates所有事件。
Polygnome

1
是的,这可以正确传播所有事件。在我的测试中,“ attr”是第一次工作,然后一切都保持“选定”状态。我使用了“ prop”,可以正确更改所有内容,但没有传播诸如(显示/隐藏)其他字段之类的事件。这个答案在所有情况下都有效,应该被认为是正确的。
iLLin

有错误!此更改会调用所有其他下拉菜单更改事件...如何避免调用其他下拉菜单更改事件
Daniel A Sathish Kumar

1
如果您已经有更改的监听器,这将导致无限循环。
qwertzman

1
努力尝试使我的愚蠢的dropdownlist值更改,此解决方案是唯一有效的解决方案!谢谢哥们儿!
AxleWack

57

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

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

2
所选属性的值可以是空字符串或selected。你是说.prop()
rink.attendant.13年

2
好答案。如果选项中不存在该值,则接受的答案以空选择结尾。
Rauli Rajande 2015年

5
最重要的是这里最好的一个。为了将来使用,我认为我们应该使用prop而不是attr。
丹尼尔(Daniel)

我非常喜欢这种解决方案。我想知道,但如果它会更好,性能的角度来看,如果选择改为“.id_100>选项”
希尔

43
<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");

36

对我来说,以下工作

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

27

我认为最简单的方法是选择设置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);
    }
});

与直接设置val()相比,我更喜欢这种方法。我也喜欢设置属性-有助于调试。$(this).attr(“ selected”,“ selected”)
Craig Jacobs

17

您可以使用属性选择器在任何属性及其值上进行选择[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);

15

最好的方法是这样的:

$(`#YourSelect option[value='${YourValue}']`).prop('selected', true);

在Chrome上,设置$('<select>').val('asdf')未更新选择以显示当前选择的选项。这个答案解决了这个问题。
约书亚伯恩斯

虽然这也可以使用,但是$('<select>')。val('asdf')在chrome 79.0.3945.88中的效果很好
QMaster

14

一个简单的答案是,在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%可行,因为它取自我的工作... :)希望它能有所帮助。


您的默认值为1000?为什么不“”
voodoocode '18

2
它是可选的,您可以根据需要进行修改.. :)
Mang Jojot

14

没有理由去想太多,您要做的就是访问和设置属性。而已。

好的,这是一些基本的dom: 如果您使用 JavaScript进行操作,那么您会这样做:

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

但是,您不是使用直接的JavaScript,而是使用jQuery。在jQuery中,您想使用.prop()函数来设置属性,因此您可以这样操作:

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

无论如何,只要确保您的ID是唯一的即可。否则,您将在墙上撞头,想知道为什么这不起作用。


12

最简单的方法是:

的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


12

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

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

这样,代码将接近更改用户的选择,JS Fiddle中包含了解释:

JS小提琴


为什么是这样?你能解释一下吗?
71GA

JS提琴手。使用change()方法时,代码将接近更改用户的选择,同时需要处理变化中的侦听器。
蔡仔

12

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

#graphtype在select标签的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>

8
var opt = new Option(name, id);
$("#selectboxName").append(opt);
opt.setAttribute("selected","selected");

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

7

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

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

4

这对于Select Control肯定有效:

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


4

链接 在此处输入图片说明

使用val() jQuery方法在DropDown中选择多值

    $(function () {

        $("button").click(function () {
            $("#myDropDownSingle").val('5');
            $("#myDropDownMultiple").val(['5', '4', '8']);
        });

    });

的HTML

<p>
    <h5>Single Selection</h5>
    <select id="myDropDownSingle" class="form-control">
        <option value="0">Select Value 0</option>
        <option value="8">Option value 8</option>
        <option value="5">Option value 5</option>
        <option value="4">Option value 4</option>
    </select>
</p>
<p>
    <h5>Multiple Selection</h5>
    <select id="myDropDownMultiple" class="form-control" multiple>
        <option value="0">Select Value 0</option>
        <option value="8">Option value 8</option>
        <option value="5">Option value 5</option>
        <option value="4">Option value 4</option>
    </select>
</p>

<p>
    <button>Get Value and Text on Button Click</button>
</p>

3

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

SelectComponent:

<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的混合物发挥了魔力。


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,这是跨浏览器支持的,并且也会触发更改以使您可以捕获它。

基本上是人类动作模拟。


2
  • 您必须牢记要动态更改的值,该值必须与HTML中定义的选项中的值相同case sensative。您可以按以下方式动态更改选择框,

$("div#YOUR_ID").val(VALUE_CHANGED).change(); //value must present in options you selected otherwise it will not work


1

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

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

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

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

希望这可以帮助。


0

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

var value;

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

//Do work here


-1

这很好

jQuery('.id_100').change(function(){ 
        var value = jQuery('.id_100').val(); //it gets you the value of selected option 
        console.log(value); // you can see your sected values in console, Eg 1,2,3
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.