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>

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


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.


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.


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).


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

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().


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,



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

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>

:) 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


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

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>


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ć.


7

To powinno działać:

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

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

4

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

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

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>

2

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

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

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">

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

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




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

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.


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 ...


1

Oto proste rozwiązanie tego problemu.

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

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!


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>

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()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.