如何使用 JavaScript 在选择下拉列表中选择一个值?

IT技术 javascript
2021-01-16 23:42:47

我有一个这样的下拉菜单

<select style="width: 280px" id="Mobility" name="Mobility">
  <option selected="">Please Select</option>
  <option>K</option>
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
  <option>6</option>
  <option>7</option>
  <option>8</option>
  <option>9</option>
  <option>10</option>
  <option>11</option>
  <option>12</option>
</select>

我使用这一行来选择它在 Mozilla 而非 IE 中工作的值?为什么它不工作?

var element = document.getElementById("Mobility");
element.value = "10";
6个回答

使用selectedIndex属性

document.getElementById("Mobility").selectedIndex = 12; //Option 10

替代方法:

循环遍历每个值:

//Get select object
var objSelect = document.getElementById("Mobility");

//Set selected
setSelectedValue(objSelect, "10");

function setSelectedValue(selectObj, valueToSet) {
    for (var i = 0; i < selectObj.options.length; i++) {
        if (selectObj.options[i].text== valueToSet) {
            selectObj.options[i].selected = true;
            return;
        }
    }
}
如果我有元素的名称而不是 ID 怎么办?
2021-03-21 23:42:47
无论如何不使用selectedIndex?
2021-04-09 23:42:47

最简单的方法是使用这个

document.getElementById("mySelect").value = "banana";

myselect 是下拉菜单的名称 香蕉只是下拉列表中的项目之一

function setSelectedIndex(s, v) {
    for ( var i = 0; i < s.options.length; i++ ) {
        if ( s.options[i].value == v ) {
            s.options[i].selected = true;
            return;
        }
    }
}

其中 s 是下拉列表,v 是值

它适用于他在选项中指定值的情况,例如 <option value="K">K</option>
2021-03-20 23:42:47
@GregM,OP 没有为选项指定值,只有文本。
2021-03-25 23:42:47
@GregM,基于 OP 中的 HTML,这是行不通的。s.options[i].value应该是s.options[i].text
2021-04-02 23:42:47
好的,你的权利:(,如果他有一些value,我会在那里回答;)
2021-04-09 23:42:47

如果您知道值,则是最简单的可能解决方案

document.querySelector('option[value=" + value +"]').selected = true
完美运行。
2021-03-23 23:42:47

我意识到这是一个老问题,但我会发布我的用例的解决方案,以防其他人遇到与我在实施James Hill 的回答(上面)时遇到的情况相同的情况

我在尝试解决同一问题时发现了这个问题。 詹姆斯的回答让我达到了 90%。但是,对于我的用例,从下拉列表中选择项目也会从下拉onchange事件的页面上触发一个操作James编写的代码没有触发这个事件(至少在我测试的 Firefox 中)。因此,我做了以下小改动:

function setSelectedValue(object, value) {
    for (var i = 0; i < object.options.length; i++) {
        if (object.options[i].text === value) {
            object.options[i].selected = true;
            object.onchange();
            return;
        }
    }

    // Throw exception if option `value` not found.
    var tag = object.nodeName;
    var str = "Option '" + value + "' not found";

    if (object.id != '') {
        str = str + " in //" + object.nodeName.toLowerCase()
              + "[@id='" + object.id + "']."
    }

    else if (object.name != '') {
        str = str + " in //" + object.nodeName.toLowerCase()
              + "[@name='" + object.name + "']."
    }

    else {
        str += "."
    }

    throw str;
}

请注意object.onchange()我添加到原始解决方案中调用这将调用处理程序以确保页面上的操作发生。

编辑

添加了value在未找到选项时抛出异常的代码这是我的用例所需要的。