如何使用 JavaScript 以编程方式设置选择框元素的值?

IT技术 javascript html dom
2021-02-06 19:40:25

我有以下 HTML<select>元素:

<select id="leaveCode" name="leaveCode">
  <option value="10">Annual Leave</option>
  <option value="11">Medical Leave</option>
  <option value="14">Long Service</option>
  <option value="17">Leave Without Pay</option>
</select>

使用以leaveCode数字为参数的 JavaScript 函数,如何在列表中选择合适的选项?

6个回答

您可以使用此功能:

selectElement('leaveCode', '11')

function selectElement(id, valueToSelect) {    
    let element = document.getElementById(id);
    element.value = valueToSelect;
}
正如@ring0 指出的那样,当 valueToSelect 不存在时,它会在 chrome 中插入一个空白条目。而 IE 和 firefox 保留最后选择的值。
2021-03-12 19:40:25
那么多选呢?如果有多个选项,这似乎不起作用(至少在 Chrome 25 中)。
2021-03-16 19:40:25
IE 的注意事项:<option> 必须具有 value='valueToSelect' 属性。您不能将 <option>..</option> 中的显示文本用作 valueToSelect
2021-03-20 19:40:25
如果您需要触发更改事件,您还应该执行以下操作: element.dispatchEvent(new Event('change'));
2021-04-04 19:40:25
很好的答案,这比循环选项要容易得多。它符合标准:dev.w3.org/html5/spec/...如果存在浏览器不兼容问题(当然有 :) 我很想知道它们是什么。这就是你通常指望 ppk 做的事情,但他固执地拒绝出现在我对这个主题的搜索中。
2021-04-06 19:40:25

如果您使用 jQuery,您也可以这样做:

$('#leaveCode').val('14');

这将选择<option>值为 14 的 。


使用普通的 Javascript,这也可以通过两种Document方法实现

  • 使用document.querySelector,您可以根据 CSS 选择器选择元素:

    document.querySelector('#leaveCode').value = '14'
    
  • 使用更成熟的方法 with document.getElementById(),正如函数名称所暗示的那样,您可以根据其选择一个元素id

    document.getElementById('leaveCode').value = '14'
    

您可以运行以下截取的代码来查看这些方法和 jQuery 函数的运行情况:

$("#leaveCode").val("14").change();
2021-03-11 19:40:25
这也可以用于多选;只需将一个字符串数组而不是单个字符串传递给 'val' 函数。参见:stackoverflow.com/a/16583001/88409
2021-03-22 19:40:25
有没有办法通过这样做来触发 $('#leaveCode').on('change', function() ?
2021-03-23 19:40:25
function setSelectValue (id, val) {
    document.getElementById(id).value = val;
}
setSelectValue('leaveCode', 14);

不回答问题,但您也可以按索引选择,其中 i 是您要选择的项目的索引:

var formObj = document.getElementById('myForm');
formObj.leaveCode[i].selected = true;

您还可以使用循环遍历要按显示值选择的项目:

for (var i = 0, len < formObj.leaveCode.length; i < len; i++) 
    if (formObj.leaveCode[i].value == 'xxx') formObj.leaveCode[i].selected = true;
不应该 formObj.leaveCode[i].selected = true; 是 formObj.options[i].selected = true; ?
2021-03-24 19:40:25

我比较了不同的方法:

比较如何使用 JS 或 jQuery 设置选择值的不同方法

代码:

$(function() {
    var oldT = new Date().getTime();
     var element = document.getElementById('myId');
    element.value = 4;
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId option").filter(function() {
        return $(this).attr('value') == 4;
    }).attr('selected', true);
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId").val("4");
    console.error(new Date().getTime() - oldT);
});

带有 ~4000 个元素的选择输出:

  • 1 毫秒
  • 58 毫秒
  • 612 毫秒

使用 Firefox 10。 注意:我做这个测试的唯一原因是因为 jQuery 在我们的列表中表现非常糟糕,有大约 2000 个条目(它们在选项之间有更长的文本)。在 val() 之后我们有大约 2 秒的延迟

还要注意:我根据实际值设置值,而不是文本值。