2011-02-02 17 views
43

Ho una serie di caselle a discesa generate dinamicamente sulla mia pagina. fondamentalmente li ho clonati usando jQuery. ora voglio catturare il valore selezionato su ogni menu a discesa sull'evento di modifica.Ottieni il valore corrente selezionato nel menu a discesa utilizzando jQuery

Ho provato qualcosa del genere che non ha funzionato.

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

Come posso fare?

+4

'$ (this) .val()' dovrebbe funzionare. Cosa ricevi dal secondo avviso? –

+1

Hey scusa ragazzi ... è un mio errore non sto impostando il valore delle opzioni ....! $ (this) .val() funziona bene .. – Amit

risposta

56

Questo è quello che ti serve :)

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

Per nuovo jQuery utilizzare on

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

wow cool ..! questo è meglio ... – Amit

+0

@Amit Questo è puro JavaScript, potrebbe esserci qualche cosa di jQuery ma presumo che questo metodo sia leggermente più veloce e puoi vedere cosa sta succedendo se devi eseguire il debug di qualsiasi cosa. – Olical

+0

grazie mille, questa è la soluzione per il mio problema;) – davidselo

4

Si può provare:

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

Questo prenderà il valore del * primo * menu a discesa, non quello appena modificato. –

2

provare questo ...

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

non funziona per il mio caso .. – Amit

4

Per ottenere il valore di un elemento a discesa (seleziona), utilizzare solo val().

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

Se si desidera il testo dell'opzione selezionata, utilizzando questo:

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

Check it out ->

Per ottenere il testo

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

Per ottenere valore

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

Per ottenere il testo dell'opzione selezionata

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

per ottenere il valore dell'opzione selezionata

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

Risposta perfetta: confronto tra il valore selezionato e il testo visualizzato selezionato. Grazie! – barrypicker

+0

Attenzione: IE8 non supporta il selettore pseudo-classe: selezionato, quindi è possibile ottenere un valore nullo in quel browser. Se hai bisogno di supportare IE8 potresti aver bisogno di qualcosa come: jQuery (jQuery ('# opzione selme') [jQuery ('# selme') [0] .selectedIndex]). Text() –

2

Le opzioni di cui sopra non funzionano perché non fanno parte della specifica CSS (è l'estensione jQuery). Dopo aver trascorso 2-3 giorni a scavare intorno per informazioni, ho scoperto che l'unico modo per selezionare il testo dell'opzione selezionata dal menu a tendina IS:

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

Fare riferimento alle note aggiuntive di seguito: Perché: selezionato è un L'estensione jQuery non fa parte della specifica CSS, le query che utilizzano: selezionato non possono sfruttare l'aumento di prestazioni fornito dal metodo DOM querySelectorAll() nativo. Per ottenere le migliori prestazioni durante l'utilizzo: selezionato per selezionare gli elementi, selezionare prima gli elementi utilizzando un selettore puro CSS, quindi utilizzare .filter(":selected").(Copiato da: http://api.jquery.com/selected-selector/)

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

citiesList è id del tag select

+0

Questa è la migliore risposta. Più semplice e semplice –

+0

Grazie Ron Royston – Dharmesh

+0

Questa è stata la risposta che ha funzionato per me con Chrome. Grazie. –

2

Questo è in realtà più efficiente e ha una migliore leggibilità a mio parere, se si desidera accedere al vostro selezionare con questo o un'altra variabile

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

Infatti, se ricordo male phpStorm tenterà di correggere automaticamente l'altro metodo.

2

Nel caso in cui si desideri l'indice del valore selezionato corrente.

$selIndex = $("select#myselectid").prop('selectedIndex')); 
Problemi correlati