Jak uzyskać $ (tę) wybraną opcję w jQuery?


91

Poniższy kod działa:

$("#select-id").change(function(){
  var cur_value = $('#select-id option:selected').text();
  . . .
});

Jak refaktoryzować drugą linię, aby:

var cur_value = $(this).***option-selected***.text();

Do czego używasz ***option-selected***?

Odpowiedzi:


120

Dla wybranej wartości: $(this).val()

Jeśli potrzebujesz wybranego elementu opcji, $("option:selected", this)


105
 $(this).find('option:selected').text();

To zadziałało idealnie dla mnie - próbowałem, $("option:selected", this)jak wspomniano powyżej, ale to było problematyczne. Używałem kliknięcia przycisku, aby dołączyć wybrany tekst elementu opcji do innego elementu div, ale kiedy kliknąłem przycisk, faktycznie zmieniło to wybrany element ... dziwne. Użyj tego.
skwidbreth

53

Moim zdaniem najlepszy i najkrótszy sposób na zdarzenia zmiany na liście rozwijanej, aby uzyskać wybraną opcję:

$('option:selected',this);

aby uzyskać atrybut value:

$('option:selected',this).attr('value');

aby uzyskać pokazaną część między tagami:

$('option:selected',this).text();

W twojej próbce:

$("#select-id").change(function(){
  var cur_value = $('option:selected',this).text();
});

Nie używaj .context, jest przestarzały od wersji jQuery 1.10 - api.jquery.com/category/deprecated/deprecated-1.10
rafx

Tak, ale masz na myśli to: api.jquery.com/context $ ("ul", document.body) .context.nodeName, którego nie używam
angelmedia

1
Podoba mi się odpowiedź, ale dlaczego jest najlepsza?
Sébastien Gicquel



9

Możesz użyć finddo wyszukania wybranej opcji, która jest potomkiem węzłów wskazanych przez bieżący obiekt jQuery:

var cur_value = $(this).find('option:selected').text();

Ponieważ jest to prawdopodobnie najbliższe dziecko, sugerowałbym użycie .childrenzamiast tego:

var cur_value = $(this).children('option:selected').text();

7
var cur_value = $(this).find('option:selected').text();

Ponieważ optionprawdopodobnie selectjesteś bezpośrednim dzieckiem , możesz również użyć:

var cur_value = $(this).children('option:selected').text();

http://api.jquery.com/find/


Gdzie otrzymujesz option-selectedbez cytatów ...?
Platinum Azure

To była literówka, kiedy pisałem. Poprawiono odpowiedź.
thomthom

find('option:selected')zwraca dla mnie pusty ciąg. Jaka wersja jQuery jest wymagana? Pracuję w 1.6.1. children('option:selected')działa.
B Seven

option:selectedjest tam od wersji 1.0 api.jquery.com/selected-selector
thomthom

0

Najlepsze przypuszczenie:

var cur_value = $('#select-id').children('option:selected').text();

W tym przypadku bardziej lubię dzieci, ponieważ wiesz, że idziesz tylko o jedną gałąź w dół drzewa DOM ...


Może tak naprawdę miałeś na myśli var cur_value = $ (this) .children ('opcja: wybrane'). Text ();
Joe Johnston

0

To poprostu

$(this).val();

Myślę, że jQuery jest wystarczająco sprytny, aby wiedzieć, czego potrzebujesz

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.