2011-02-02 11 views
43

Mam zestaw dynamicznie generowanych skrzynek rozwijanych na mojej stronie. w zasadzie klonuję je za pomocą jQuery. teraz chcę przechwycić wartość wybraną na każdym liście rozwijanym w przypadku zmiany.Pobierz bieżącą wartość wybraną w menu rozwijanym przy użyciu jQuery

Próbowałem czegoś takiego, co nie działało.

$('._someDropDown').live('change', function(e) { 
      //debugger; 
      var v = $(this); 
      alert($(this + ':selected').val()); 
      alert($(this).val()); 
     }); 

Jak mogę to zrobić?

+4

'$ (this) .val()' powinno działać. Co otrzymujesz od drugiego alarmu? –

+1

Hej, przepraszam .. to mój błąd, nie ustawiam wartości opcji ....! $ (this) .val() działa dobrze .. – Amit

Odpowiedz

56

To co trzeba :)

$('._someDropDown').live('change', function(e) { 
    console.log(e.target.options[e.target.selectedIndex].text); 
}); 

Dla nowych jQuery używać on

$(document).on('change', '._someDropDown', function(e) { 
    console.log(this.options[e.target.selectedIndex].text); 
}); 
+0

wow fajne ..! to jest lepsze ... – Amit

+0

@Amit To jest czysta JavaScript, może to być jakaś rzecz jQuery, ale zakładam, że ta metoda będzie nieco szybsza i możesz zobaczyć, co się dzieje, jeśli potrzebujesz debugowania czegokolwiek. – Olical

+0

dziękuję bardzo, jest to rozwiązanie dla mojego problemu;) – davidselo

4

Można spróbować:

$("._someDropDown").val(); 
+0

Spowoduje to pobranie wartości listy * *, a nie tej, która została właśnie zmieniona. –

2

spróbować ...

$("#yourdropdownid option:selected").val(); 
+0

nie będzie działać w moim przypadku. – Amit

4

Aby uzyskać wartość rozwijanego (wybierz) element, wystarczy użyć val().

$('._someDropDown').live('change', function(e) { 
    alert($(this).val()); 
}); 

Jeśli chcesz tekście wybranej opcji, wykorzystując w ten sposób:

$('._someDropDown').live('change', function(e) { 
    alert($('[value=' + $(this).val() + ']', this).text()); 
}); 
5

to sprawdzić ->

Uzyskania tekstu

$("#selme").change(function(){ 
$(this[this.selectedIndex]).text(); 
}); 

Dla uzyskania wartości

$("#selme").change(function(){ 
$(this[this.selectedIndex]).val(); 
}); 
79

Aby uzyskać tekst o wybranej opcji

$("#your_select :selected").text(); 

Aby uzyskać wartość wybranej opcji

$("#your_select").val(); 
+1

Doskonała odpowiedź - porównanie wybranej wartości z wybranym wyświetlanym tekstem. Dzięki! – barrypicker

+0

Uwaga: IE8 nie obsługuje zaznaczonego selektora pseudoklasy, więc w tej przeglądarce może pojawić się wartość pusta. Jeśli potrzebujesz obsługi IE8, możesz potrzebować czegoś takiego jak: jQuery (jQuery ('# selme option') [jQuery ('# selme') [0] .selectedIndex]) text() –

2

Omówione powyżej opcje nie będą działać ponieważ nie są one częścią specyfikacji CSS (jest to rozszerzenie jQuery). Spędziwszy 2-3 dni kopanie wokół informacji, okazało się, że jedynym sposobem, aby zaznaczyć tekst wybranej opcji z listy rozwijanej brzmi:

{ $("select", id:"Some_ID").find("option[selected='selected']")} 

odsyłają do pozostałych notach poniżej: Ponieważ: wybrany jest Rozszerzenie jQuery i nie będące częścią specyfikacji CSS, zapytania używające: selected nie mogą wykorzystać zwiększenia wydajności zapewnianego przez natywną metodę DOM querySelectorAll(). Aby uzyskać najlepszą wydajność podczas używania: wybrana do wybrania elementów, najpierw wybierz elementy za pomocą czystego selektora CSS, a następnie użyj .filter(":selected").(Skopiowane z: http://api.jquery.com/selected-selector/)

12
$("#citiesList").change(function() { 
    alert($("#citiesList option:selected").text()); 
    alert($("#citiesList option:selected").val());    
}); 

citiesList jest id wybierz tag

+0

To jest najlepsza odpowiedź. Najprostszy i najprostszy. –

+0

Dzięki Ron Royston – Dharmesh

+0

To była odpowiedź, która sprawdziła się w Chrome. Dziękuję Ci. –

2

To jest rzeczywiście bardziej wydajny i ma lepszą czytelność moim zdaniem, jeśli chcesz uzyskać dostęp do Twojego wybierz z to lub innej zmiennej

$('#select').find('option:selected') 

W rzeczywistości, jeśli dobrze pamiętam, phpStorm spróbuje automatycznie poprawić drugą metodę.

2

Jeśli chcesz uzyskać indeks aktualnie wybranej wartości.

$selIndex = $("select#myselectid").prop('selectedIndex')); 
Powiązane problemy