jQuery Отримайте вибраний варіант зі спадного меню


1127

Зазвичай я використовую $("#id").val()для повернення значення вибраної опції, але цього разу це не працює. Вибраний тег має ідентифікаторaioConceptName

html-код

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

2
ви можете показати розмітку елемента#aioConceptName
Хорхе

2
це дивно, тому що працює на цьому прикладі jsfiddle.net/pAtVP , ви впевнені, що подія, яку він спричинить у вашій поведінці?
Хорхе


11
Пізня думка, але .val () не спрацює, якщо ви не встановите valueатрибут для цих <option>s, правда?
Яків Валента

8
Останні версії jQuery (тестовані з 1.9.1) не мають проблем з цією розміткою. Наведений вище приклад $("#aioConceptName").val()повертає choose io.
Салман

Відповіді:


1844

Для параметрів, що випадають, ви, мабуть, хочете щось подібне:

var conceptName = $('#aioConceptName').find(":selected").text();

Причина val()не робить фокус через те, що натискання на опцію не змінює значення спаду - воно просто додає :selectedвластивість до вибраного варіанту, який є дочірньою частиною випадаючого.


41
Ну добре, ви оновили своє запитання за допомогою HTML. Ця відповідь зараз не має значення. Насправді, .val()у вашому випадку повинно працюватись - ви маєте помилку в іншому місці.
Елліот Бонневіль

13
для val()чого б не використовувати var conceptVal = $("#aioConceptName option").filter(":selected").val();?
Тестер

61
Як щодо простішого var conceptVal = $("#aioConceptName option:selected").val()?
Клемен Тушар

5
Я все-таки вважаю це корисним для пошуку вибраного варіанта у виборі, де я вже отримав спадне місце раніше - наприклад, var mySelect = $('#mySelect'); / * ... більше коду трапляється ... * / var selectedText = mySelect.find(':selected').text();
Чарлз Вуд

18
Насправді причина .val () не працює для нього в тому, що він фактично не дав значення своїм параметрам, тому він повинен використовувати ваш метод для отримання вибраного тексту, тому інше виправлення було б змінити <option> виберіть io </option> до <value value = 'select io'> select io </option> Хоча ваше рішення, ймовірно, швидше та практичніше, я подумав, що все-таки я заявлю це, щоб він краще розумів чому це не працювало для нього.
Jordan LaPrise

342

Встановіть значення для кожного з параметрів

<select id="aioConceptName">
    <option value="0">choose io</option>
    <option value="1">roma</option>
    <option value="2">totti</option>
</select>

$('#aioConceptName').val()не працює, оскільки .val()повертає valueатрибут. Для правильної роботи valueатрибути повинні бути встановлені для кожного <option>.

Тепер ви можете зателефонувати $('#aioConceptName').val()замість усього цього :selectedвуду, запропонованого іншими.


11
Caveat: якщо не обраний варіант, $('#aioConceptName').val()повертається null / "undefined"
gordon

Це запевнило мене, що $ ('# myselect'). Val () було правильним, я просто нерозумно забув дати ідентифікатор вибору!
zzapper

4
Один із моїх варіантів вибору - це спеціальний promptваріант <option>Please select an option</option>. У моєму випадку не було проблеми додати атрибут пустого значення, <option value="">Please...</option>але я вважаю, що в деяких випадках відсутність атрибута значення має сенс. Але +1, тому що ваше формулювання водио змусило мене посміхнутися.
Кирило Духон-Доріс

Чи не val()виберіть valueтекст замість тексту всередині option? Тобто він вибирається 1замість roma.
смертельний вираз

4
@deathlock У цьому вся суть .val(). Якщо ви хочете маніпулювати / використовувати текст, використовуйте $(":selected).text()або встановіть значення і текст, щоб вони були однаковими.
Яків Валента

162

Я наткнувся на це питання і розробив більш стисну версію відповіді Елліот Бонневіля:

var conceptName = $('#aioConceptName :selected').text();

або загалом:

$('#id :pseudoclass')

Це заощаджує додатковий дзвінок jQuery, вибирає все в одному кадрі та є більш зрозумілим (на мою думку).


1
@JohnConde Прийнята відповідь на Meta з вами не погоджується: meta.stackexchange.com/questions/87678/… . На мою думку, Ед дав хорошу відповідь і лише надав додаткову довідку.
йогобрюс

Вони можуть дозволити, але це все-таки поганий ресурс
Джон Конде

1
Видалено посилання w3schools, це було не обов'язково, і пошук в Google для "jQuery класів пседуо" надає велику кількість інформації.
Ед Орсі

@EdOrsi: Хоча це економить додатковий виклик jQuery, воно не дозволяє скористатися збільшенням продуктивності, що надається нативним querySelectorAll()методом DOM (див. Документи jQuery ). Отже, воно повинно бути повільніше, ніж рішення Еліота .
Олександр Абакумов

Я, мабуть, вважаю за краще використовувати, .find(':selected')оскільки тоді це дозволяє вам телефонувати за допомогою зворотного дзвінка, приєднаного до події ... на кшталт$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest

58

Спробуйте це для цінності ...

$("select#id_of_select_element option").filter(":selected").val();

або це для тексту ...

$("select#id_of_select_element option").filter(":selected").text();

49

Якщо ви перебуваєте в контексті події, в jQuery ви можете отримати вибраний елемент опції, використовуючи
$(this).find('option:selected'):

$('dropdown_selector').change(function() {
    //Use $option (with the "$") to see that the variable is a jQuery object
    var $option = $(this).find('option:selected');
    //Added with the EDIT
    var value = $option.val();//to get content of "value" attrib
    var text = $option.text();//to get <option>Text</option> content
});

Редагувати

Як згадував PossessWithin , моя відповідь просто відповідає на питання: Як вибрати вибраний варіант.

Далі, щоб отримати значення параметра, використовуйте option.val().


2
Бездоганний! Тільки не забувайте, що вам слід додати $(this).find('option:selected').val()в кінці, щоб отримати значення елемента опції або $(this).find('option:selected').text()отримати текст. :)
Дієго Фортес



16

Читання значення (не тексту) вибраного:

var status = $("#Status").val();
var status = $("#Status")[0].value;
var status = $('#Status option:selected').val();

Як відключити вибір? в обох варіантах значення можна змінити, використовуючи:

А

Користувач не може взаємодіяти зі спадним меню. І він не знає, які ще варіанти можуть існувати.

$('#Status').prop('disabled', true);

Б

Користувач може бачити параметри у спадному меню, але всі вони вимкнено:

$('#Status option').attr('disabled', true);

У цьому випадку $("#Status").val() буде працювати лише для версій jQuery, менших за 1.9.0. Всі інші варіанти працюватимуть.

Як оновити відключений вибір?

З коду, що знаходиться позаду, ви все одно можете оновити значення у виборі. Він відключений лише для користувачів:

$("#Status").val(2);

У деяких випадках вам може знадобитися пожежа:

$("#Status").val(2).change();

11
<select id="form-s" multiple="multiple">
    <option selected>city1</option>
    <option selected value="c2">city2</option>
    <option value="c3">city3</option>
</select>   
<select id="aioConceptName">
    <option value="s1" selected >choose io</option>
    <option value="s2">roma </option>
    <option value="s3">totti</option>
</select>
<select id="test">
    <option value="s4">paloma</option>
    <option value="s5" selected >foo</option>
    <option value="s6">bar</option>
</select>
<script>
$('select').change(function() {
    var a=$(':selected').text(); // "city1city2choose iofoo"
    var b=$(':selected').val();  // "city1" - selects just first query !
    //but..
    var c=$(':selected').map(function(){ // ["city1","city2","choose io","foo"]
        return $(this).text();
    }); 
    var d=$(':selected').map(function(){ // ["city1","c2","s1","s5"]
        return $(this).val();
    });
    console.log(a,b,c,d);
});
</script>

:) приємно, що :selected.. val () або text () не працює правильно у кількох варіантах вибору, лише якщо якийсь масив буде створений з нього, як це map()можна зробити.
Ol Sen

10

ви повинні використовувати цей синтаксис:

var value = $('#Id :selected').val();

Тому спробуйте цей Код:

var values = $('#aioConceptName :selected').val();

ви можете випробувати у Fiddle: http://jsfiddle.net/PJT6r/9/

дивіться про цю відповідь у цій публікації


9

Використовуючи jQuery, просто додайте changeподію та отримайте вибране значення чи текст у цьому обробнику.

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

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").text())
});

Або якщо вам потрібно вибране значення, будь ласка, використовуйте цей код:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").attr('value'))
});

9

Використовуйте jQuery.val()функцію і для вибраних елементів:

Метод .val () використовується в першу чергу для отримання значень елементів форми, таких як введення, вибору та текстових областей. У разі виділення елементів він повертається, nullколи не вибрано жодного параметра, і масив, що містить значення кожного вибраного параметра, коли є щонайменше один, і можливо вибрати більше, оскільки multipleатрибут присутній.

$(function() {
  $("#aioConceptName").on("change", function() {
    $("#debug").text($("#aioConceptName").val());
  }).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<select id="aioConceptName">
  <option>choose io</option>
  <option>roma</option>
  <option>totti</option>
</select>
<div id="debug"></div>


8

Для тих, хто дізнався, що найкраща відповідь не працює.

Спробуйте використовувати:

  $( "#aioConceptName option:selected" ).attr("value");

Для мене працює в останніх проектах, тому варто на це поглянути.



6

Прямо вперед і досить легко:

Ваше спадне меню

<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

Код Jquery, щоб отримати вибране значення

$('#aioConceptName').change(function() {
    var $option = $(this).find('option:selected');

    //Added with the EDIT
    var value = $option.val(); //returns the value of the selected option.
    var text = $option.text(); //returns the text of the selected option.
});

4

Ви можете спробувати налагодити його таким чином:

console.log($('#aioConceptName option:selected').val())

4

Для отримання вибраного значення тегу:

 $('#id_Of_Parent_Selected_Tag').find(":selected").val();

А якщо ви хочете отримати текст, використовуйте цей код:

 $('#id_Of_Parent_Selected_Tag').find(":selected").text();

Наприклад:

<div id="i_am_parent_of_select_tag">
<select>
        <option value="1">CR7</option>
        <option value="2">MESSI</option>
</select>
</div>


<script>
 $('#i_am_parent_of_select_tag').find(":selected").val();//OUTPUT:1 OR 2
 $('#i_am_parent_of_select_tag').find(":selected").text();//OUTPUT:CR7 OR MESSI
</script>

2

Якщо ви хочете захопити атрибут 'value' замість текстового вузла, це допоможе вам:

var conceptName = $('#aioConceptName').find(":selected").attr('value');

Це лише частково рішення - також необхідно встановити значення для кожного варіанту - це вже охоплене відповіддю Якова Валетти
Девід

2

спробуйте це

$(document).ready(function() {

    $("#name option").filter(function() {
        return $(this).val() == $("#firstname").val();
    }).attr('selected', true);

    $("#name").live("change", function() {

        $("#firstname").val($(this).find("option:selected").attr("value"));
    });
});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<select id="name" name="name"> 
<option value="">Please select...</option> 
<option value="Elvis">Elvis</option> 
<option value="Frank">Frank</option> 
<option value="Jim">Jim</option> 
</select>

<input type="text" id="firstname" name="firstname" value="Elvis" readonly="readonly">

2
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

Уявіть DDL як масив з індексами, ви вибираєте один індекс. Виберіть той, на який ви хочете встановити його у своєму JS.




1

щоб отримати вибір із тим самим класом = ім'я, яким ви могли це зробити, і перевірити, чи вибрано варіант вибору.

var bOK = true;
$('.optKategorien').each(function(index,el){
    if($(el).find(":selected").text() == "") {
        bOK = false;
    }
});

1

У мене була така ж проблема , і я зрозумів, чому він не працює на моєму випадку
HTML - сторінка була розділена на кілька фрагментів HTML , і я виявив , що у мене є ще одне поле введення , який несе той же ідентифікатор select, з- за якою val()завжди бути порожньою
Я сподіваюся, що це заощадить день для всіх, хто має подібні проблеми.


Дійсно, це розбудило мене до моєї проблеми. Я сам використовував qty-поле у ​​цілі даних та .. qty_field у самому id. Завжди перевіряйте основи двічі або більше.
cdsaenz

1

щоб використовувати $ ("# id"). val, слід додати значення такому параметру:

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option value="choose">choose io</option>
</select>

ще можна використовувати

   $("#aioConceptName").find(':selected').text();

Я хочу, щоб це допомагало ..


1

Ось просте рішення цього питання.

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();краще, ніж використовувати іншу знахідку ()
Саді

0

Напевно, найкращим варіантом для такого сценарію є використання методу зміни jQuery для пошуку вибраного значення, наприклад:

$('#aioConceptName').change(function(){

   //get the selected val using jQuery's 'this' method and assign to a var
   var selectedVal = $(this).val();

   //perform the rest of your operations using aforementioned var

});

Я віддаю перевагу цьому методу, оскільки потім можна виконувати функції для кожного вибраного параметра в заданому полі вибору.

Сподіваюся, що це допомагає!


0

Зазвичай вам потрібно буде не тільки отримати вибране значення, але і виконати певну дію. То чому б не уникнути всієї магії jQuery і просто передати вибране значення як аргумент до виклику дій?

<select onchange="your_action(this.value)">
   <option value='*'>All</option>
   <option ... />
</select>

0

Ви можете вибрати за допомогою точно вибраної опції: Нижче наведено InternalText

$("select#aioConceptName > option:selected").text()

У той час як нижче, ви отримаєте цінність.

$("select#aioConceptName > option:selected").val()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.