Получить выбранное значение / текст из Выбрать при изменении

96
<select onchange="test()" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
</select>

Мне нужно получить значение выбранной опции в javascript: кто-нибудь знает, как получить выбранное значение или текст, расскажите, пожалуйста, как написать для него функцию. Я назначил функцию onchange () для выбора, что мне делать после этого?

Шива
источник
1
Если вы хотите только valueиз optionкоторый был выбран , то ... <select onchange="window.alert(this.value);">... optionS ... </select>... должен получить я только что , и больше ничего.
S0AndS0 07

Ответы:

114

Используйте для этого либо JavaScript, либо jQuery.

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

<script>
function val() {
    d = document.getElementById("select_id").value;
    alert(d);
}
</script>

<select onchange="val()" id="select_id">

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

$('#select_id').change(function(){
    alert($(this).val());
})
Хусейн
источник
.value () работает в современных браузерах, но не в старых. См. Bytes.com/topic/javascript/answers/…
Benissimo
2
@PlayHardGoPro Это выбранное значение. Если вам нужен текст (например, -Select- или Communication), вы должны использовать text: select.textили в jQuery select.text().
ricksmt
Отсутствует точка с запятой в конце jquery там ... :)
lindhe
Использование jQuery. $('#select_id option:selected').text()Это вернет текст выбранной опции, Select или Communication
Пауло Борральхо Мартинс
1
ванильный подход javascript: document.getElementById("select_id").onchange = (evt) => { console.log(evt.srcElement.value); }
Спенсер,
44

Если вы ищите это в Google и не хотите, чтобы прослушиватель событий был атрибутом, используйте:

document.getElementById('my-select').addEventListener('change', function() {
  console.log('You selected: ', this.value);
});
<select id="my-select">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

Brandon G
источник
30

function test(a) {
    var x = (a.value || a.options[a.selectedIndex].value);  //crossbrowser solution =)
    alert(x);
}
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>

эль Чувак
источник
для чего a.value? Есть ли браузеры, которые действительно поддерживают такое? нельзя просто использовать a.options[a.selectedIndex].value?
Anonymous
@Anonymous <чтобы получить subj =)
el Dude
27

Нет необходимости в функции замены. Вы можете получить значение одной строкой:

document.getElementById("select_id").options[document.getElementById("select_id").selectedIndex].value;

Или разделите его для лучшей читаемости:

var select_id = document.getElementById("select_id");

select_id.options[select_id.selectedIndex].value;
Дэнни
источник
20

Вау, среди ответов пока нет действительно многоразовых решений ... Я имею в виду, что стандартный обработчик событий должен получать только eventаргумент и вообще не должен использовать идентификаторы ... Я бы использовал:

function handleSelectChange(event) {

    // if you want to support some really old IEs, add
    // event = event || window.event;

    var selectElement = event.target;

    var value = selectElement.value;
    // to support really old browsers, you may use
    // selectElement.value || selectElement.options[selectElement.selectedIndex].value;
    // like el Dude has suggested

    // do whatever you want with value
}

Вы можете использовать этот обработчик с каждым встроенным js:

<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>

jQuery:

jQuery('#select_id').on('change',handleSelectChange);

или ванильный обработчик JS:

var selector = document.getElementById("select_id");
selector.onchange = handleSelectChange;
// or
selector.addEventListener('change', handleSelectChange);

И не нужно переписывать это для каждого selectэлемента, который у вас есть.

Пример фрагмента:

function handleSelectChange(event) {

    var selectElement = event.target;
    var value = selectElement.value;
    alert(value);
}
<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>

ЯковЛ
источник
2
Отличное решение, следует принять. Использование чистого элемента события без ссылки на документ DOM - это самый гибкий способ, который работает во многих средах, таких как React, Vue или просто в простых HTML-формах.
VanDavv
8
let dropdown = document.querySelector('select');
if (dropdown) dropdown.addEventListener('change', function(event) {
    console.log(event.target.value);
});
Рассел Штраус
источник
Этот подход полезен, если вы работаете со стрелочными функциями.
Franchy
любую стрелочную функцию можно заменить на function () {}, это то же самое
Рассел Штраус
это не то же самое. thisв стрелочной функции получает свой контекст из своего лексического окружения, но обычная функция имеет собственное this. Проверьте это
Franchy
6

Использовать

document.getElementById("select_id").selectedIndex

Или получить значение:

document.getElementById("select_id").value
ОблачноМрамор
источник
такой способ получения значения не будет работать в старых браузерах, вместо этого используйте решение Дэнни
wlf
5
<script>
function test(a) {
    var x = a.selectedIndex;
    alert(x);
}
</script>
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>

в предупреждении вы увидите значение INT выбранного индекса, обработайте выбор как массив, и вы получите значение

МИПНАМИКА
источник
5

HTML:

<select onchange="cityChanged(this.value)">
      <option value="CHICAGO">Chicago</option>
      <option value="NEWYORK">New York</option>
</select>

JS:

function cityChanged(city) {
    alert(city);
}
Александр
источник
4

Интересно , что все выложил о valueи textопции , чтобы получить от <option>и никто не предложил label.

Так что я labelтоже предлагаю , поскольку поддерживается всеми браузерами

Чтобы получить value(так же, как предлагали другие)

function test(a) {
var x = a.options[a.selectedIndex].value;
alert(x);
}

Чтобы получить option text(т.е. общение или -Выбрать-)

function test(a) {
var x = a.options[a.selectedIndex].text;
alert(x);
}

ИЛИ (Новое предложение)

function test(a) {
var x = a.options[a.selectedIndex].label;
alert(x);
}

HTML

<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2" label=‘newText’>Communication</option>
</select>

Примечание. В приведенном выше HTML для optionзначения 2 labelбудет возвращен newText вместо Communication.

Также

Примечание. Невозможно установить свойство метки в Firefox (только возврат).

Сурджит С.Д.
источник
3

Это старый вопрос, но я не уверен, почему люди не предложили использовать объект события для получения информации вместо повторного поиска в DOM.

Просто пройдите через объект события в своей функции onChange, см. Пример ниже

function test() { console.log(event.srcElement.value); }

http://jsfiddle.net/Corsico/3yvh9wc6/5/

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

Влад Пинтя
источник
2

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>

самзна
источник
0

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;
Вишну С Бабу
источник
-1

Я попытался объяснить это на собственном примере, но надеюсь, что это поможет вам. Вам не нужно onchange = "test ()" Пожалуйста, запустите фрагмент кода для получения реального результата.

document.getElementById("cars").addEventListener("change", displayCar);

function displayCar() {
  var selected_value = document.getElementById("cars").value;
  alert(selected_value);
}
<select id="cars">
  <option value="bmw">BMW</option>
  <option value="mercedes">Mercedes</option>
  <option value="volkswagen">Volkswagen</option>
  <option value="audi">Audi</option>
</select>

Аяз
источник
При изменении намного лучше, чем событие щелчка, поскольку выбор варианта не является злокачественным.
Райли Карни
@RileyCarney ну, это зависит, вместо того, чтобы изменять код рефакторинга в части пользовательского интерфейса при изменении имени функции в части js, это более элегантно, и, кстати, я не видел никакого события щелчка.
Вы отредактировали его, чтобы удалить событие onclick, ха-ха. Так сомнительно, до того, как вы делали щелчок, который выдает уведомление, если вы щелкаете по нему для автомобиля. edited 7 hours agoПо крайней мере, вы исправили код, который не работал.
Райли Карни