37

我难住了。我有一个带有下拉列表的表单,我想获取列表中所有值的列表。我从 w3 学校中提取了以下示例(是的,我知道它不可靠,但堆栈溢出的其他解决方案似乎与此非常相似)。它对我不起作用,我尝试将其插入 jsfiddle,但没有运气。

HTML:
<form>Select your favorite fruit:
    <select id="mySelect">
        <option value="a">Apple</option>
        <option value="o">Orange</option>
        <option value="p">Pineapple</option>
        <option value="b">Banana</option>
    </select>
</form>
<button type="button" onclick="displayResult()">Display text of all options</button>

javascript:

function displayResult() {
    var x = document.getElementById("mySelect");
    var txt = "All options: ";
    var i;
    for (i = 0; i < x.length; i++) {
        txt = txt + "\n" + x.options[i].value;
    }
    alert(txt);
}

不在 jsfiddle 上工作:http: //jsfiddle.net/WfBRr/1/

但是,它适用于他们的网站: http ://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_option_text2

关于如何解决这个问题的任何想法?

4

6 回答 6

39

你有两个问题:

1) 包含 HTML 的顺序。尝试在小提琴的 JavaScript 设置中将下拉菜单从“onLoad”更改为“no wrap - head”。

2)您的函数打印值。你真正追求的是文字

x.options[i].text;而不是x.options[i].value;

http://jsfiddle.net/WfBRr/5/

于 2013-08-07T20:50:31.040 回答
8

改变:

x.length

至:

x.options.length

链接到小提琴

我同意亚伯拉罕的观点——你可能想用text而不是value

更新
您的小提琴不起作用的原因是因为您选择了选项:“onLoad”而不是:“No wrap - in”

于 2013-08-07T20:52:05.517 回答
5

根据 DOM 结构,您可以使用以下代码:

var x = document.getElementById('mySelect');
     var txt = "";
     var val = "";
     for (var i = 0; i < x.length; i++) {
         txt +=x[i].text + ",";
         val +=x[i].value + ",";
      }
于 2013-10-02T05:00:49.580 回答
5

例子:

<select name="sel1" id="sel1">
    <option value="001">option 001</option>
    <option value="002">option 002</option>
    <option value="003">option 003</option>
    <option value="004">option 004</option>
</select>

价值观:

let selectElement = document.querySelectorAll('[name=sel1]');
let optionValues = [...selectElement[0].options].map(o => o.value)

选项文本

let selectElement = document.querySelectorAll('[name=sel1]');
let optionNames = [...selectElement[0].options].map(o => o.text)
于 2021-04-18T22:56:42.370 回答
3

基于@Marek Lisiecki,我做了一个演示来回答这个问题,如下所示。

我认为这是使用 ES6 的更好方法

function displayResult(){
  let selectElement = document.getElementById('mySelect');
  let optionNames = [...selectElement.options].map(o => o.text);
  console.log(optionNames);
}

function displayResult(){
  let selectElement = document.getElementById('mySelect');
  let optionNames = [...selectElement.options].map(o => o.text);
  console.log(optionNames);
}
<form>Select your favorite fruit:
    <select id="mySelect">
        <option value="a">Apple</option>
        <option value="o">Orange</option>
        <option value="p">Pineapple</option>
        <option value="b">Banana</option>
    </select>
</form>
<button type="button" onclick="displayResult()">Display text of all options</button>

于 2021-09-23T02:05:06.703 回答
2

看起来直接将点击事件放在按钮上会导致问题。由于某种原因,它找不到该功能。不知道为什么...

如果您在 javascript 中附加事件处理程序,它确实可以工作。

在这里看到它:http: //jsfiddle.net/WfBRr/7/

<button id="display-text" type="button">Display text of all options</button>

document.getElementById('display-text').onclick = function () {
    var x = document.getElementById("mySelect");
    var txt = "All options: ";
    var i;
    for (i = 0; i < x.length; i++) {
        txt = txt + "\n" + x.options[i].value;
    }
    alert(txt);
}
于 2013-08-07T20:52:57.530 回答