Javascript, получить список всех значений в поле выбора

Я в тупике. У меня есть форма с выпадающим списком, и я хотел бы получить список всех значений в списке. Я вытащил приведенный ниже пример из школ 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

Любые идеи о том, как это решить?

Ответы

Ответ 1

У вас было две проблемы:

1) Порядок, в который вы включили HTML. Попробуйте изменить раскрывающийся список с "onLoad" на "no wrap-head" в настройках JavaScript вашей скрипки.

2) Ваша функция печатает значения. То, что вы на самом деле, это текст

x.options[i].text; вместо x.options[i].value;

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

Ответ 2

Изменение:

x.length

в:

x.options.length

Ссылка на скрипку

И я согласен с Авраамом - вы можете использовать text вместо value

Обновление
Причина, по которой ваша скрипка не сработала, заключалась в том, что вы выбрали опцию: "onLoad" вместо: "Без переноса"

Ответ 3

Похоже, что нажатие кнопки непосредственно на кнопку вызывает проблему. По какой-то причине он не может найти функцию. Не знаете, почему...

Если вы прикрепляете обработчик событий в 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);
}

Ответ 4

В соответствии с структурой 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 + ",";
      }