Отримати вибране значення / текст із пункту «Вибрати при зміні»


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

Відповіді:


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/…
Беніссімо

2
@PlayHardGoPro Це вибране значення. Якщо ви хочете текст (наприклад, -Виберіть- або Зв'язок), ви б використовували текст: select.textабо в jQuery select.text().
ricksmt

Не вистачає крапки з комою в кінці jquery там ... :)
лінда

Використовуючи jQuery $('#select_id option:selected').text(). Це поверне текст вибраного варіанту, Вибір або Зв'язок
Пауло Борральо Мартінс

1
ванільний підхід до javascript: document.getElementById("select_id").onchange = (evt) => { console.log(evt.srcElement.value); }
Спенсер

44

Якщо ви гуглите це і не хочете, щоб прослуховувач подій був атрибутом, використовуйте:

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>


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 <для отримання subj =)
el Dude

27

Немає необхідності в функції onchange. Ви можете захопити значення в один рядок:

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);
});

Цей підхід корисний, якщо ви працюєте з функціями стрілок.
Франчі

будь-яку функцію стрілки можна замінити функцією () {}, це одне і те ж
Рассел Штраус

це не те саме. 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

Також

Примітка: Неможливо встановити властивість label у 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, це залежить, замість того, щоб змінювати код рефакторингу частини ui при зміні імені функції в частині js, він більш елегантний, і до речі, я не бачив жодної події натискання.

Ви відредагували його, щоб видалити подію onclick ха-ха. Так тіньово, перш ніж ви робили клік, який робив повідомлення, якщо ви натискали на нього для машини. edited 7 hours agoПринаймні ви виправили код, який не працював добре.
Райлі Карні,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.