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

1383

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

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

var as = document.form1.ddlViewBy.value;
var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;
var value = document.getElementById("ddlViewBy").value;
Теги:
html-select

23 ответа

2579
Лучший ответ

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

<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.options[e.selectedIndex].value;

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

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

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

  • 0
    Я пишу точно такой же код, НО внутри функции в теге скрипта. Когда пользователь выберет эту опцию из выпадающего меню, я должен получить текст. Так я должен использовать onclick / onggle / onchange? Какой из них?
  • 10
    @ R11G, используй onchange :)
Показать ещё 8 комментариев
290

Обычный 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").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'
}];
  • 1
    Я, должно быть, делаю что-то не так, потому что, когда я пытаюсь это сделать, я получаю текст каждого варианта в выпадающем списке.
  • 6
    Это сработало для меня по-другому. $ ("# ddlViewBy: selected"). val () не без selected
Показать ещё 3 комментария
154
var strUser = e.options[e.selectedIndex].value;

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

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

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

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

Эта опция имеет:

  • Индекс = 0
  • Значение = привет
  • Текст = Hello World
  • 1
    я думал, что «.value» в javascript должен возвращать значение для меня, но только «.text» будет возвращать то, что возвращает .SelectedValue в asp.net. Спасибо, например, за!
  • 1
    Да - сделайте значение параметра таким же, как оно есть. Проще - парень выше должен написать больше кода, чтобы компенсировать его первоначальную неопределенность.
Показать ещё 1 комментарий
52

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

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

Рабочая Демо

 <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>
28
var selectedValue = document.getElementById("ddlViewBy").value;
  • 2
    Это самое простое решение, по крайней мере, для современных браузеров. Смотрите также W3Schools .
18

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

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

Запуск выше в Firefox и др. даст вам ошибку "не является функцией", потому что IE позволяет вам избежать использования() вместо []:

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

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

13
<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>
12

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

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

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

  • 4
    Это использует jQuery, который не отвечает на вопрос OP.
11

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

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

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

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

var e = document.getElementByName("my_select_with_name_ddlViewBy");
var strUser = e.options[e.selectedIndex].value;
  • 0
    Не работает, если my_select_with_name_ddlViewBy является массивом, подобным my_select_with_name_ddlViewBy []
8

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

Live demo: http://jsbin.com/jiwena/1/edit?html,output.

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

6

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

например.

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

var myValue = myElement.querySelector('[selected]').value;
6

Обратитесь к статье Выбор выпадающего элемента с использованием JavaScript или jQuery. Они объяснили это разными способами с помощью JavaScript и jQuery.

Использование jQuery:

$(‘select’).val();
4

Запуск примера того, как он работает:

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.

  • 0
    Хороший ответ для того, чтобы показать, как код должен обновляться после использования!
3

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

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

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

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

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

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

3

В 2015 году в Firefox выполняется следующее.

е. опции.selectedIndex

2

Есть два способа сделать это с помощью 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'
2

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

document.getElementById('elementId').selectedOptions[0].value
2

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

var x = document.form1.list.value;

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

  • 0
    OP сказал, что у них это не сработало: «Я попробовал описанные ниже методы, но они все возвращают выбранный индекс вместо значения: var as = document.form1.ddlViewBy.value; ...»
1

Единственная причина, по которой я могу видеть, что этот код не работает, - это использование IE7- и забыли указать атрибут value для вашего <option> -tags... Каждый другой браузер должен преобразовать то, что внутри open- закрыть теги в качестве значения параметра.

0

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

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

0

Вы можете просто использовать selectElement.value чтобы получить значение выбранного параметра select.

document.getElementById("idOfSelect").value;

var res = document.querySelector('p');
var select = document.querySelector('select');
res.textContent = "Selected Value: "+select.value;
select.addEventListener("change", function(e){
  res.textContent = "Selected Value: "+select.value;
});
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
Change value of the select to show the value.
<p>
</p>
0

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

<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> 
-2

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

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

  • 4
    Если вы загружаете целую библиотеку с одной стороны, это намного проще ...
  • 0
    Правильно, вы правы в этом случае.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню