jQuery Uzyskaj wybraną opcję z menu rozwijanego

1127

Zwykle zwracam $("#id").val()wartość wybranej opcji, ale tym razem nie działa. Wybrany tag ma identyfikatoraioConceptName

Kod HTML

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>
William Kinaan
źródło
2
czy mógłbyś pokazać znaczniki żywiołu#aioConceptName
Jorge
2
to dziwne, ponieważ działa na tym przykładzie jsfiddle.net/pAtVP , czy jesteś pewien, że wydarzenie zostanie uruchomione w twoim otoczeniu?
Jorge
5
możliwy duplikat jQuery: Pobierz wybraną opcję z menu rozwijanego
Kenny Linsky
11
Późna myśl, ale .val () nie zadziała, dopóki nie ustawisz valueatrybutu na tych <option>s, prawda?
Jacob Valenta
8
Najnowsze wersje jQuery (testowane z 1.9.1) nie mają problemów z tym znacznikiem. W powyższym przykładzie $("#aioConceptName").val()zwraca choose io.
Salman A,

Odpowiedzi:

1844

W przypadku opcji rozwijanych prawdopodobnie potrzebujesz czegoś takiego:

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

Powodem val()tego nie jest to, że kliknięcie opcji nie zmienia wartości menu rozwijanego - po prostu dodaje :selectedwłaściwość do wybranej opcji, która jest potomkiem menu rozwijanego.

Elliot Bonneville
źródło
41
Ach, dobra, zaktualizowałeś swoje pytanie za pomocą HTML. Ta odpowiedź jest teraz nieistotna. W rzeczywistości .val()powinien działać w twoim przypadku - musisz popełnić błąd w innym miejscu.
Elliot Bonneville
13
dla val()dlaczego nie korzystać var conceptVal = $("#aioConceptName option").filter(":selected").val();?
Tester
61
Co powiesz na prostsze var conceptVal = $("#aioConceptName option:selected").val()?
Klemen Tušar
5
Nadal uważam, że jest to pomocne w znajdowaniu wybranej opcji w zaznaczeniu, w którym wcześniej otrzymałem listę rozwijaną - np. var mySelect = $('#mySelect'); / * ... więcej kodu się dzieje ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood
18
Właściwie powodem tego, że .val () nie działa dla niego jest to, że tak naprawdę nie dał wartości swoim opcjom, dlatego musi użyć twojej metody, aby pobrać zaznaczony tekst, więc inną poprawką byłaby zmiana <option> wybierz io </option> do <option value = 'choose io'> wybierz io </option> Chociaż twoje rozwiązanie jest prawdopodobnie szybsze i bardziej praktyczne, pomyślałem, że i tak to stwierdzę, aby lepiej zrozumiał dlaczego to nie działało dla niego.
Jordan LaPrise
342

Ustaw wartości dla każdej opcji

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

$('#aioConceptName').val()nie działa, ponieważ .val()zwraca valueatrybut. Aby działało poprawnie, valueatrybuty muszą być ustawione na każdym z nich <option>.

Teraz możesz zadzwonić $('#aioConceptName').val()zamiast :selectedsugerować inne voodoo.

Jacob Valenta
źródło
11
Uwaga: jeśli nie zostanie wybrana żadna opcja, $('#aioConceptName').val()zwraca null / „undefined”
Gordon
Zapewniło mnie to, że $ ('# myselect'). Val () było poprawne, po prostu głupio zapomniałem nadać wybranemu identyfikator!
zzapper
4
Jedna z moich wybranych opcji jest promptopcją specjalną <option>Please select an option</option>. W moim przypadku nie było problemu z dodaniem pustego atrybutu wartości, <option value="">Please...</option>ale wydaje mi się, że w niektórych przypadkach brak atrybutu wartości ma sens. Ale +1, ponieważ twoje słowa vodoo rozśmieszyły mnie.
Cyril Duchon-Doris
Czy nie val()zaznaczono valuezamiast tekstu w środku option? Czyli wybiera 1zamiast roma.
deathlock
4
@deathlock To właśnie o to chodzi .val(). Jeśli chcesz manipulować / używać tekstu, użyj $(":selected).text()lub ustaw wartość i tekst na takie same.
Jacob Valenta
162

Natknąłem się na to pytanie i opracowałem bardziej zwięzłą wersję odpowiedzi Elliota BOnneville'a:

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

lub ogólnie:

$('#id :pseudoclass')

Oszczędza to dodatkowego połączenia jQuery, zaznacza wszystko w jednym ujęciu i jest bardziej przejrzyste (moja opinia).

Ed Orsi
źródło
1
@JohnConde Przyjęty odpowiedź na Meta nie zgadza się z wami meta.stackexchange.com/questions/87678/... . Moim zdaniem Ed udzielił dobrej odpowiedzi i po prostu przedstawił dodatkowe informacje.
itsbruce
Mogą na to pozwolić, ale nadal jest to zły zasób
John Conde
1
Usunięto link w3schools, nie było to absolutnie konieczne, a wyszukiwanie w Google dla „klas jQuery pseduo” zawiera wiele informacji.
Ed Orsi,
@EdOrsi: Chociaż zapisuje dodatkowe wywołanie jQuery, uniemożliwia skorzystanie ze zwiększenia wydajności zapewnianego przez natywną querySelectorAll()metodę DOM (patrz dokumenty jQuery ). Powinno więc być wolniejsze niż rozwiązanie Eliota .
Alexander Abakumov
Prawdopodobnie wolałbym używać, .find(':selected')ponieważ wtedy możesz zadzwonić z oddzwaniania dołączonego do wydarzenia ... jak$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest
58

Wypróbuj to za wartość ...

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

lub to dla tekstu ...

$("select#id_of_select_element option").filter(":selected").text();
Vladimir Djuricic
źródło
49

Jeśli jesteś w kontekście zdarzenia, w jQuery możesz pobrać wybrany element opcji za pomocą: w
$(this).find('option:selected')ten sposób:

$('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
});

Edytować

Jak wspomniano przez PossessWithin , moja odpowiedź wystarczy odpowiedzieć na pytanie: jak wybrać wybraną „opcję”.

Następnie, aby uzyskać wartość opcji, użyj option.val().

JoDev
źródło
2
Bez skazy! Tylko nie zapomnij, że powinieneś dodać $(this).find('option:selected').val()na końcu, aby uzyskać wartość elementu opcjonalnego lub $(this).find('option:selected').text()tekst. :)
Diego Fortes,
22
$('#aioConceptName option:selected').val();
dzikie nic
źródło
16

Odczytywanie wartości (nie tekstu) zaznaczenia:

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

Jak wyłączyć wybór? w obu wariantach wartość można zmienić za pomocą:

ZA

Użytkownik nie może wchodzić w interakcje z menu rozwijanym. I nie wie, jakie mogą być inne opcje.

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

b

Użytkownik widzi opcje w menu, ale wszystkie są wyłączone:

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

W takim przypadku $("#Status").val() będzie działać tylko dla wersji jQuery mniejszych niż1.9.0 . Wszystkie inne warianty będą działać.

Jak zaktualizować wyłączony wybór?

Z kodu z tyłu możesz nadal aktualizować wartość w swoim wyborze. Jest wyłączony tylko dla użytkowników:

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

W niektórych przypadkach może być konieczne uruchomienie zdarzeń:

$("#Status").val(2).change();
profimedica
źródło
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>
Ol Sen
źródło
:) miłą rzeczą jest to, że :selected… val () lub text () nie działa poprawnie na wielu opcjach wyboru, tylko jeśli utworzona jest z niej jakaś tablica map().
Ol Sen
10

powinieneś użyć tej składni:

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

Więc wypróbuj ten kod:

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

możesz przetestować w Fiddle: http://jsfiddle.net/PJT6r/9/

zobacz o tej odpowiedzi w tym poście

DLMAN
źródło
9

Korzystając z jQuery, wystarczy dodać changezdarzenie i uzyskać wybraną wartość lub tekst w tym module obsługi.

Jeśli potrzebujesz zaznaczonego tekstu, użyj tego kodu:

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

Lub jeśli potrzebujesz wybranej wartości, użyj tego kodu:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").attr('value'))
});
sanman
źródło
9

Użyj również jQuery.val()funkcji dla wybranych elementów:

Metoda .val () służy przede wszystkim do uzyskiwania wartości elementów formularza, takich jak input, select i textarea. W przypadku wybranych elementów zwraca, nullgdy żadna opcja nie jest zaznaczona, a tablica zawierająca wartość każdej wybranej opcji, gdy jest co najmniej jedna i można wybrać więcej, ponieważ multipleatrybut jest obecny.

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

Salman A.
źródło
8

Dla każdego, kto odkrył, że najlepsza odpowiedź nie działa.

Spróbuj użyć:

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

Działa dla mnie w ostatnich projektach, więc warto na to spojrzeć.

użytkownik2709153
źródło
7

To powinno działać:

var conceptName = $('#aioConceptName').val();
d.popov
źródło
6

Prosto i całkiem łatwo:

Twoja lista rozwijana

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

Kod Jquery, aby uzyskać wybraną wartość

$('#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.
});
Juan J
źródło
4

Możesz spróbować debugować w ten sposób:

console.log($('#aioConceptName option:selected').val())
swathi
źródło
4

Aby uzyskać wartość wybranego tagu:

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

A jeśli chcesz otrzymać tekst, użyj tego kodu:

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

Na przykład:

<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>
mamal
źródło
2

Jeśli chcesz chwycić atrybut „wartość” zamiast węzła tekstowego, zadziała to:

var conceptName = $('#aioConceptName').find(":selected").attr('value');
Drodarny
źródło
Jest to tylko częściowo rozwiązanie - konieczne jest również ustawienie wartości dla każdej opcji - jest to już uwzględnione w odpowiedzi Jacoba Valetty
David
2

spróbuj tego

$(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">
Haris Sultan
źródło
2
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

Wyobraź sobie DDL jako tablicę z indeksami, wybierasz jeden indeks. Wybierz ten, który chcesz ustawić za pomocą JS.

Satista
źródło
1

Możesz użyć $("#drpList").val();

Praveen Patel G.
źródło
3
Miałeś rację; jednak, odnosząc się do tekstu, pytanie jest błędne.
Federico Navarrete
1

aby pobrać zaznaczenie o tej samej klasie = nazwa, możesz to zrobić, aby sprawdzić, czy wybrano opcję wyboru.

var bOK = true;
$('.optKategorien').each(function(index,el){
    if($(el).find(":selected").text() == "") {
        bOK = false;
    }
});
Bludau Media
źródło
1

Miałem ten sam problem i zorientowałem się, dlaczego nie działa w mojej sprawie
. Strona HTML została podzielona na różne fragmenty HTML i stwierdziłem, że mam inne pole wejściowe o tym samym identyfikatorze select, co powoduje, że val()zawsze jest pusta
Mam nadzieję, że pozwoli to zaoszczędzić dzień każdemu, kto ma podobny problem.

Hasnaa Ibraheem
źródło
Rzeczywiście, to obudziło mnie do mojego problemu. Sam używałem qty-field w celu danych i .. qty_field w samym id. Zawsze sprawdź podstawy dwa razy lub więcej.
cdsaenz
1

aby użyć $ („# id”). val, powinieneś dodać wartość do opcji takiej jak ta:

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

w przeciwnym razie możesz użyć

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

Chciałbym, żeby to pomogło ...

Yusuf Azan
źródło
1

Oto proste rozwiązanie tego problemu.

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });
Sanjaya
źródło
1
var selectedaioConceptName = $('#aioConceptName option:selected').val();jest lepsze niż użycie innego find ()
Sadee
0

Prawdopodobnie najlepszym rozwiązaniem dla tego rodzaju scenariusza jest użycie metody zmiany jQuery w celu znalezienia aktualnie wybranej wartości, na przykład:

$('#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

});

Wolę tę metodę, ponieważ możesz następnie wykonywać funkcje dla każdej wybranej opcji w danym polu wyboru.

Mam nadzieję, że to pomaga!

Werner ZeBeard Bessinger
źródło
0

Zwykle trzeba nie tylko uzyskać wybraną wartość, ale także wykonać akcję. Dlaczego więc nie uniknąć całej magii jQuery i po prostu przekazać wybraną wartość jako argument do wezwania do działania?

<select onchange="your_action(this.value)">
   <option value='*'>All</option>
   <option ... />
</select>
Roland
źródło
0

Możesz wybrać za pomocą dokładnie wybranej opcji: Poniżej podany zostanie tekst wewnętrzny

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

Podczas gdy poniżej da ci wartość.

$("select#aioConceptName > option:selected").val()
Hafiz Shehbaz Ali
źródło