Получить выбранное значение в раскрывающемся списке с помощью JavaScript

Как получить выбранное значение из раскрывающегося списка с помощью JavaScript?

Я пробовал следующие методы, но все они возвращают выбранный индекс вместо значения:

var e = document.getElementById("ddlViewBy");
function show(){
  var as = document.forms[0].ddlViewBy.value;
  var strUser = e.options[e.selectedIndex].value;
  console.log(as, strUser);
}
e.onchange=show;
show();
<form>
  <select id="ddlViewBy">
    <option value="1">test1</option>
    <option value="2" selected="selected">test2</option>
    <option value="3">test3</option>
  </select>
</form>


person Fire Hand    schedule 06.07.2009    source источник


Ответы (29)


Если у вас есть элемент выбора, который выглядит так:

<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2" selected="selected">test2</option>
  <option value="3">test3</option>
</select>

Запуск этого кода:

var e = document.getElementById("ddlViewBy");
var strUser = e.value;

Сделал бы strUser 2. Если вы действительно хотите test2, сделайте следующее:

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].text;

Что сделало бы strUser test2

person Paolo Bergantino    schedule 06.07.2009
comment
Я пишу точно такой же код, НО внутри функции в теге скрипта. Когда пользователь выберет эту опцию в раскрывающемся меню, я должен получить текст. Так что я должен использовать onclick / onggle / onchange? Какой из них? - person R11G; 12.12.2013
comment
var strUser = e.options[e.selectedIndex].value; почему не просто var strUser = e.value ? - person The Red Pea; 31.12.2014
comment
@ TheRedPea - возможно, потому что, когда был написан этот ответ, существовала вероятность (пусть и весьма незначительная), что необходимо приспособить древнюю версию Netscape Navigator, поэтому был использован столь же древний метод доступа к значению одного выбора. Но я только догадываюсь об этом. ;-) - person RobG; 18.01.2015
comment
Я использовал вот так: var e = document.getElementById("ddlViewBy").value; - person Fthr; 25.10.2016
comment
@RishiDua вы можете перебирать варианты выбора: for(var o of e.options) { if (o.selected) { /* ... */ } } - person Massimiliano Kraus; 29.12.2017
comment
Хороший ответ, но это не подходит для множественного выбора. Может кто-нибудь помочь? - person Harold_Finch; 14.06.2018
comment
@Harold_Finch for (var o of e.options) {if (o.selected) {/ * ... * /}} решение должно работать, хотя я не помню, что я сделал (2-летний комментарий). - person Rishi Dua; 15.06.2018
comment
должно быть e.target.options[e.target.selectedIndex].text не знаю, почему это неправильно во всех ответах здесь .. - person OZZIE; 02.01.2019
comment
e.val() мне хватило - person Salam; 10.10.2019
comment
Пуристы даже написали бы const e = document.getElementById("ddlViewBy");, поскольку он не изменится (это предположение DOM) - person Fabien Haddadi; 26.11.2019
comment
@OZZIE - Посмотрите на оператор присваивания, начинающийся с var e в вопросе OP. Хотя по соглашению e (или event) представляет eventObject, здесь OP использует его для представления элемента. - person Rounin; 28.01.2020
comment
stackoverflow.com/ questions / 1085801 / - person Elias; 17.03.2021

Обычный JavaScript:

var e = document.getElementById("elementId");
var value = e.options[e.selectedIndex].value;
var text = e.options[e.selectedIndex].text;

jQuery:

$("#elementId :selected").text(); // The text content of the selected option
$("#elementId :selected").val(); // The value of the selected option

AngularJS: (http://jsfiddle.net/qk5wwyct):

// HTML
<select ng-model="selectItem" ng-options="item as item.text for item in items">
</select>
<p>Text: {{selectItem.text}}</p>
<p>Value: {{selectItem.value}}</p>

// JavaScript
$scope.items = [{
  value: 'item_1_id',
  text: 'Item 1'
}, {
  value: 'item_2_id',
  text: 'Item 2'
}];
person Vitalii Fedorenko    schedule 18.12.2011
comment
Я, должно быть, делаю что-то не так, потому что, когда я пытаюсь это сделать, я возвращаю текст каждой опции в раскрывающемся списке. - person Kevin; 07.06.2013
comment
Это сработало для меня по-другому. $ (# ddlViewBy: selected) .val () не без selected - person Ruwantha; 14.08.2013
comment
element.options[e.selectedIndex].value должно быть element.options[element.selectedIndex].value - person Christopher; 27.03.2015
comment
Все еще полезно - спасибо, что написали варианты / язык! Если бы я знал только эквивалент Office JS API Dropdown ... - person Cindy Meister; 01.03.2018
comment
должно быть e.target.options[e.target.selectedIndex].text не знаю, почему это неправильно во всех ответах здесь .. - person OZZIE; 02.01.2019
comment
Это также сработало для меня в jQuery, просто поместив $("#elementId").val() без необходимости упоминания selected - person Elias; 17.03.2021

var strUser = e.options[e.selectedIndex].value;

Это правильно и должно дать вам значение. Это текст, который вам нужен?

var strUser = e.options[e.selectedIndex].text;

Итак, вы понимаете терминологию:

<select>
    <option value="hello">Hello World</option>
</select>

В этом варианте есть:

  • Индекс = 0
  • Значение = привет
  • Текст = Привет, мир
person Greg    schedule 06.07.2009
comment
Я думал, что .value в javascript должен возвращать значение для меня, но только .text будет возвращаться как то, что возвращает .SelectedValue в asp.net. Например, спасибо! - person Fire Hand; 06.07.2009
comment
Да - сделайте значение параметра таким же, как оно есть. Проще - парню выше нужно написать больше кода, чтобы компенсировать его первоначальную неопределенность. - person Andrew Koper; 27.08.2013
comment
должно быть e.target.options[e.target.selectedIndex].text не знаю, почему это неправильно во всех ответах здесь .. - person OZZIE; 02.01.2019

В следующем коде показаны различные примеры, связанные с получением / вводом значений из полей ввода / выбора с использованием JavaScript.

Ссылка на источник

Рабочий Javascript & jQuery Demo

введите описание изображения здесь

введите описание изображения здесь

 <select id="Ultra" onchange="run()">  <!--Call run() function-->
     <option value="0">Select</option>
     <option value="8">text1</option>
     <option value="5">text2</option>
     <option value="4">text3</option>
</select><br><br>
TextBox1<br>
<input type="text" id="srt" placeholder="get value on option select"><br>
TextBox2<br>
<input type="text" id="rtt"  placeholder="Write Something !" onkeyup="up()">

Следующий скрипт получает значение выбранного параметра и помещает его в текстовое поле 1

<script>
    function run() {
        document.getElementById("srt").value = document.getElementById("Ultra").value;
    }
</script>

Следующий скрипт получает значение из текстового поля 2 и выдает предупреждение с его значением

<script>
    function up() {
        //if (document.getElementById("srt").value != "") {
            var dop = document.getElementById("srt").value;
        //}
        alert(dop);
    }
</script>

Следующий скрипт вызывает функцию из функции

<script>
    function up() {
        var dop = document.getElementById("srt").value;
        pop(dop); // Calling function pop
    }

    function pop(val) {
        alert(val);
    }?
</script>
person Code Spy    schedule 03.12.2012
comment
onchange=run(this.value) или (this.text) могут быть более полезными. - person Berci; 25.01.2020

Если вы когда-нибудь столкнетесь с кодом, написанным исключительно для Internet Explorer, вы можете увидеть следующее:

var e = document.getElementById("ddlViewBy");
var strUser = e.options(e.selectedIndex).value;

Выполнение вышеуказанного в Firefox и др. Выдаст ошибку «не является функцией», потому что Internet Explorer позволяет вам обойтись без использования () вместо []:

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

Правильный способ - использовать квадратные скобки.

person Carl Onager    schedule 18.06.2012

<select id="Ultra" onchange="alert(this.value)"> 
 <option value="0">Select</option>
 <option value="8">text1</option>
 <option value="5">text2</option>
 <option value="4">text3</option>
</select>

Любое поле ввода / формы может использовать ключевое слово «this», когда вы обращаетесь к нему изнутри элемента. Это избавляет от необходимости находить форму в dom-дереве, а затем размещать этот элемент внутри формы.

person boateng    schedule 14.04.2015
comment
Объяснение было бы в порядке. - person Peter Mortensen; 10.07.2019

Это можно сделать двумя способами: с помощью JavaScript или jQuery.

JavaScript:

var getValue = document.getElementById('ddlViewBy').selectedOptions[0].value;

alert (getValue); // This will output the value selected.

ИЛИ

var ddlViewBy = document.getElementById('ddlViewBy');

var value = ddlViewBy.options[ddlViewBy.selectedIndex].value;

var text = ddlViewBy.options[ddlViewBy.selectedIndex].text;

alert (value); // This will output the value selected

alert (text); // This will output the text of the value selected

jQuery:

$("#ddlViewBy:selected").text(); // Text of the selected value

$("#ddlViewBy").val(); // Outputs the value of the ID in 'ddlViewBy'
person Dulith De Costa    schedule 23.07.2018

Новички, скорее всего, захотят получить доступ к значениям из выбора с атрибутом NAME, а не с атрибутом ID. Мы знаем, что всем элементам формы нужны имена, даже до того, как они получат идентификаторы.

Итак, я добавляю решение getElementsByName() только для того, чтобы новые разработчики тоже его увидели.

NB. имена для элементов формы должны быть уникальными, чтобы ваша форма могла быть использована после публикации, но DOM может разрешить совместное использование имени более чем одним элементом. По этой причине рассмотрите возможность добавления идентификаторов в формы, если это возможно, или явным образом укажите имена элементов формы my_nth_select_named_x и my_nth_text_input_named_y.

Пример использования getElementsByName:

var e = document.getElementsByName("my_select_with_name_ddlViewBy")[0];
var strUser = e.options[e.selectedIndex].value;
person Ben Greenaway    schedule 09.03.2011
comment
Не работает, если my_select_with_name_ddlViewBy является массивом вроде my_select_with_name_ddlViewBy [] - person zeuf; 09.12.2017

Просто используйте

  • $('#SelectBoxId option:selected').text(); для получения текста, как указано

  • $('#SelectBoxId').val(); для получения выбранного значения индекса

person Marvil Joy    schedule 18.02.2014
comment
Здесь используется jQuery, который не отвечает на вопрос OP. - person David Meza; 28.03.2016

Предыдущие ответы все еще оставляют место для улучшения из-за возможностей, интуитивности кода и использования id по сравнению с name. Можно получить считывание трех данных выбранной опции - ее порядкового номера, ее значения и ее текста. Этот простой кросс-браузерный код выполняет все три функции:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Demo GetSelectOptionData</title>
</head>
<body>
    <form name="demoForm">
        <select name="demoSelect" onchange="showData()">
            <option value="zilch">Select:</option>
            <option value="A">Option 1</option>
            <option value="B">Option 2</option>
            <option value="C">Option 3</option>
        </select>
    </form>

    <p id="firstP">&nbsp;</p>
    <p id="secondP">&nbsp;</p>
    <p id="thirdP">&nbsp;</p>

    <script>
    function showData() {
        var theSelect = demoForm.demoSelect;
        var firstP = document.getElementById('firstP');
        var secondP = document.getElementById('secondP');
        var thirdP = document.getElementById('thirdP');
        firstP.innerHTML = ('This option\'s index number is: ' + theSelect.selectedIndex + ' (Javascript index numbers start at 0)');
        secondP.innerHTML = ('Its value is: ' + theSelect[theSelect.selectedIndex].value);
        thirdP.innerHTML = ('Its text is: ' + theSelect[theSelect.selectedIndex].text);
    }
     </script>
</body>
</html>

Живая демонстрация: http://jsbin.com/jiwena/1/edit?html,output.

id следует использовать для макияжа. Для целей функциональной формы name по-прежнему действует, также в HTML5, и его следует использовать. Наконец, помните, что в некоторых местах используются квадратные скобки, а не круглые. Как было объяснено ранее, только (более старые версии) Internet Explorer будет принимать круглые во всех местах.

person Frank Conijn    schedule 22.05.2015

Используя jQuery:

$('select').val();
person Community    schedule 25.05.2016

Другое решение:

document.getElementById('elementId').selectedOptions[0].value
person Javad Kargar    schedule 18.07.2018
comment

Самый простой способ сделать это:

var value = document.getElementById("selectId").value;
person Clairton Luz    schedule 01.04.2020
comment
Он хочет не значение, а отображаемый текст в поле выбора - person Thanasis; 20.04.2020
comment
Я думаю, что это именно тот ответ, который ищет большинство людей. - person Zack Plauché; 04.07.2020
comment
Хороший ответ! Это было полезно - person Dilip Agheda; 29.08.2020

Запущенный пример того, как это работает:

var e = document.getElementById("ddlViewBy");
var val1 = e.options[e.selectedIndex].value;
var txt = e.options[e.selectedIndex].text;

document.write("<br />Selected option Value: "+ val1);
document.write("<br />Selected option Text: "+ txt);
<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2">test2</option>
  <option value="3"  selected="selected">test3</option>
</select>

Примечание. Значения не меняются при изменении раскрывающегося списка. Если вам требуется эта функциональность, необходимо реализовать изменение onClick.

person Ani Menon    schedule 02.08.2017
comment
Хороший ответ, показывающий, как нужно обновлять код после использования! - person ReinstateMonica3167040; 17.07.2018

Вы можете использовать querySelector.

Например,

var myElement = document.getElementById('ddlViewBy');

var myValue = myElement.querySelector('[selected]').value;
person Rounin    schedule 04.01.2018

У меня несколько иное мнение о том, как этого добиться. Обычно я делаю это следующим образом (насколько я знаю, это более простой способ, он работает со всеми браузерами):

<select onChange="functionToCall(this.value);" id="ddlViewBy">
  <option value="value1">Text one</option>
  <option value="value2">Text two</option>
  <option value="value3">Text three</option>
  <option value="valueN">Text N</option>
</select>
person ThomAce    schedule 12.10.2018

Чтобы согласиться с предыдущими ответами, я делаю это как однострочный. Это для получения фактического текста выбранной опции. Уже есть хорошие примеры получения порядкового номера. (А по тексту я просто хотел показать вот так)

let selText = document.getElementById('elementId').options[document.getElementById('elementId').selectedIndex].text

В некоторых редких случаях вам может потребоваться использовать круглые скобки, но это бывает очень редко.

let selText = (document.getElementById('elementId')).options[(document.getElementById('elementId')).selectedIndex].text;

Я сомневаюсь, что это происходит быстрее, чем двухстрочная версия. Мне просто нравится максимально консолидировать свой код.

К сожалению, при этом элемент по-прежнему извлекается дважды, что не идеально. Метод, который захватывает элемент только один раз, был бы более полезным, но я еще не понял этого в отношении того, как сделать это с помощью одной строки кода.

person Genko    schedule 12.05.2017

В 2015 году в Firefox также работает следующее.

д. параметры .selectedIndex

person Hector Llorens    schedule 22.10.2015

Вот строка кода JavaScript:

var x = document.form1.list.value;

Предполагая, что раскрывающееся меню названо list name="list" и включено в форму с атрибутом name name="form1".

person Belgacem Ksiksi    schedule 27.02.2017
comment
OP сказал, что это не сработало для них: я попробовал методы ниже, но все они возвращают выбранный индекс вместо значения: _1 _... - person ReinstateMonica3167040; 17.07.2018

В более современных браузерах querySelector позволяет нам получить выбранный параметр в одном операторе, используя _ 2_ псевдокласс. Из выбранного варианта мы можем собрать любую информацию, которая нам нужна:

const opt = document.querySelector('#ddlViewBy option:checked');
// opt is now the selected option, so
console.log(opt.value, 'is the selected value');
console.log(opt.text, "is the selected option's text");
<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2" selected="selected">test2</option>
  <option value="3">test3</option>
</select>

person Heretic Monkey    schedule 08.06.2020

Для этого вы должны использовать querySelector. Это также стандартизирует способ получения значения от элементов формы.

var dropDownValue = document.querySelector('#ddlViewBy').value;

Сценарий: https://jsfiddle.net/3t80pubr/

person Pal Singh    schedule 16.01.2020

Пытаться

ddlViewBy.value                      // value

ddlViewBy.selectedOptions[0].text    // label

console.log( ddlViewBy.value );

console.log( ddlViewBy.selectedOptions[0].text );
<select id="ddlViewBy">
  <option value="1">Happy</option>
  <option value="2">Tree</option>
  <option value="3"  selected="selected">Friends</option>
</select>

person Kamil Kiełczewski    schedule 18.12.2019

event.target.value внутри обратного вызова onChange помог мне.

person emptywalls    schedule 22.04.2021

Вот простой способ сделать это в функции onchange:

event.target.options[event.target.selectedIndex].dataset.name

person zackify    schedule 16.04.2014
comment
Говоря о простоте, я думал об this вместо event.target. - person Christian Læirbag; 11.02.2016

Я думаю, вы можете прикрепить прослушиватель событий к самому тегу select, например:

<script>
  document.addEventListener("DOMContentLoaded", (_) => {
    document.querySelector("select").addEventListener("change", (e) => {
      console.log(e.target.value);
    });
  });
</script>

В этом сценарии вы должны убедиться, что у вас есть атрибут значения для всех ваших параметров, и они не равны нулю.

person Emmanuel Onah    schedule 20.07.2020
comment
Отличный ответ, спасибо! В моем случае у меня есть два селектора, но я смог получить доступ к идентификатору селектора с помощью 'e.srcElement.id' - person Dominic Smith; 23.12.2020

Я не знаю, правильно ли я понял вопрос, но у меня это сработало: используйте событие onchange () в своем html, например.

<select id="numberToSelect" onchange="selectNum">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>

// javascript

function selectNum(){
    var strUser = numberToSelect.value;
}

Это даст вам любое значение в раскрывающемся списке выбора за клик.

person Olawale Oladiran    schedule 29.01.2020

Просто сделай: document.getElementById('idselect').options.selectedIndex

Затем вы получите значение индекса, начиная с 0.

person Knautiluz    schedule 22.12.2018

Сделайте раскрывающееся меню с несколькими вариантами (сколько угодно!)

<select>
  <option value="giveItAName">Give it a name
  <option value="bananaShark">Ridiculous animal
  <ooption value="Unknown">Give more options!
</select>

Я немного повеселился. Вот фрагмент кода:

<select>
  <option value="RidiculousObject">Banana Shark
  <option value="SuperDuperCoding">select tag and option tag!
  <option value="Unknown">Add more tags to add more options!
</select>
<h1>Only 1 option (Useless)</h1>
<select>
  <option value="Single">Single Option
</select>  

ура, фрагмент сработал

person Dangerousgame    schedule 20.05.2020

person    schedule
comment
Это простейшее решение, по крайней мере, для современных браузеров. См. Также W3Schools. - person Erik Koopmans; 11.09.2018