JQuery Получить выбранный вариант из выпадающего

963

Обычно я использую $("#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>
  • 1
    не могли бы вы показать разметку элемента #aioConceptName
  • 1
    это странно , потому что работы на этом примере jsfiddle.net/pAtVP , вы уверены , что событие это пожары в Вашей среде?
Показать ещё 6 комментариев
Теги:

25 ответов

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

В раскрывающемся списке вы, вероятно, хотите что-то вроде этого:

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

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

  • 37
    Ах, хорошо, вы обновили свой вопрос с помощью HTML. Этот ответ сейчас не имеет значения. На самом деле .val() должен работать в вашем случае - у вас должна быть ошибка в другом месте.
  • 11
    для val() почему бы не использовать var conceptVal = $("#aioConceptName option").filter(":selected").val(); ?
Показать ещё 15 комментариев
282

Задайте значения для каждой из опций

<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 voodoo, предлагаемого другими.

  • 10
    Предупреждение: если опция не выбрана, $('#aioConceptName').val() возвращает null / "undefined"
  • 0
    Это заверило меня, что $ ('# myselect'). Val () был верен, я просто тупо забыл дать идентификатору select!
Показать ещё 3 комментария
146

Я наткнулся на этот вопрос и разработал более краткий вариант ответа Эллиота Бонневиля:

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

или в целом:

$('#id :pseudoclass')

Это экономит вам дополнительный вызов jQuery, выбирает все за один снимок и становится более понятным (мое мнение).

  • 1
    @JohnConde Принятый ответ на Meta не согласен с вами: meta.stackexchange.com/questions/87678/… . По моему мнению, Эд дал хороший ответ и только что дал дополнительную ссылку.
  • 0
    Они могут позволить это, но это все еще плохой ресурс
Показать ещё 3 комментария
51

Попробуйте это для значения...

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

или это для текста...

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

Если вы находитесь в контексте событий, в 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
});

Edit

Как упоминалось PossessWithin, мой ответ просто ответит на вопрос: как выбрать выбранный вариант.

Затем, чтобы получить значение параметра, используйте option.val().

  • 2
    Безупречный! Только не забудьте, что вы должны добавить $(this).find('option:selected').val() в конце, чтобы получить значение элемента option, или $(this).find('option:selected').text() чтобы получить текст. :)
28

Считаете ли вы использование простого старого javascript?

var box = document.getElementById('aioConceptName');

conceptName = box.options[box.selectedIndex].text;

См. также Получение текста/значения опции с помощью JavaScript

17
$('#aioConceptName option:selected').val();
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>
  • 0
    :) хорошая вещь :selected .. val () или text () не работают корректно для нескольких опций select, только если из них создается какой-то массив, как map() .
10

Чтение значения (а не текста) для выбора:

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();
9

Используя jQuery, просто добавьте событие change и получите выбранное значение или текст внутри этого обработчика.

Если вам нужен выделенный текст, используйте этот код:

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

Или, если вам нужно выбранное значение, используйте этот код:

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

Используйте функцию 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");

Работает для меня в последних проектах, поэтому стоит посмотреть на него.

7

Вы должны использовать этот синтаксис:

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

Так что попробуйте этот код:

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

Вы можете проверить в Fiddle: http://jsfiddle.net/PJT6r/9/

см об этом ответе в этом посте

5

Только это должно работать:

var conceptName = $('#aioConceptName').val();
2

Вы можете попробовать отладить это так:

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

Я надеюсь, что это также поможет лучше понять и поможет попробуйте это ниже, $('select[id="aioConceptName[]"] option:selected').each(function(key,value){ options2[$(this).val()] = $(this).text(); console.log(JSON.stringify(options2)); });
подробнее http://www.drtuts.com/get-value-multi-select-dropdown-without-value-attribute-using-jquery/

2

Если вы хотите захватить атрибут 'value' вместо текста node, это будет работать для вас:

var conceptName = $('#aioConceptName').find(":selected").attr('value');
  • 0
    Это только частичное решение - также необходимо установить значение для каждой опции - это уже охвачено ответом Джейкоба Валетты
1

попробуйте этот

$(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">
0

У меня была такая же проблема, и я понял, почему это не работает в моем случае
Страница html была разделена на разные фрагменты html, и я обнаружил, что у меня есть другое поле ввода, содержащее тот же Id select, в результате чего val() всегда был пустым
Я надеюсь, что это спасет день для тех, у кого есть подобные проблемы.

0

Прямо вперед и довольно легко:

Ваш выпадающий

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

чтобы получить выборку с тем же именем class= name, вы можете сделать это, чтобы проверить, выбрана ли опция выбора.

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

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

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

Хотя ниже даст вам ценность.

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

Обычно вам нужно не только получить выбранное значение, но и выполнить какое-либо действие. Так почему бы не избежать всей магии jQuery и просто передать выбранное значение в качестве аргумента для вызова действия?

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

Вы можете использовать $("#drpList").val();

  • 3
    Ты был прав; Однако он относится к тексту, вопрос не тот.
-2

Вероятно, лучшая ставка для такого сценария - использовать метод изменения jQuery, чтобы найти текущее выбранное значение, например:

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

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

   //perform the rest of your operations using aforementioned var

});

Я предпочитаю этот метод, потому что вы можете выполнять функции для каждого выбранного параметра в данном поле выбора.

Надеюсь, это поможет!

Ещё вопросы

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