2010-10-25 8 views
16

Ho cercato su Google e ho provato un certo numero di modi per farlo, ma nessuno finora ha funzionato per me. Quello che sto cercando è abbastanza semplice: voglio essere in grado di dire se un menu a discesa ha un valore selezionato o meno. Il problema è che selectedIndex,: selezionato, val(), ecc restituiscono risultati per il caso seguente:JS/Jquery: come verificare se il menu a discesa ha selezionato i valori?

<select> 
<option value="123">123</option> 
<option value="234">234</option> 
</select> 

Ovviamente il browser visualizzerà questo menu a discesa con l'opzione 123 in corso di selezione, ma saranno selezionati solo perché non ci sono altre opzioni, in realtà questo menu a discesa non ha un valore selezionato perché non esiste una proprietà "selezionata". Quindi, fondamentalmente sto cercando di trovare il modo di distinguere la discesa al di sopra di questo

<select> 
<option selected value="123">123</option> 
<option value="234">234</option> 
</select> 

risposta

19
var hasValue = ($('select > [selected]').length > 0); 

In alternativa,

var hasValue = $('select').has('[selected]'); 
+0

Ben fatto; una soluzione ideale. –

+0

La prima opzione funziona alla grande, grazie per questo. –

+0

Il secondo non funzionava per me, ma il primo era perfetto. –

2

Soluzione rapida:

<select> 
<option selected></option> 
<option value="123">123</option> 
<option value="234">234</option> 
</select> 

Poi vedere se si dispone di un .val()

+0

Anche se questo funzionerà, non è una soluzione, è una soluzione :) Purtroppo ho a che fare con un'applicazione già esistente in cui non c'è il primo elemento vuoto – Eugene

+0

@Eugene - ohh boo! '$ ('seleziona opzione'). prima() precedente (" ");'? haha. – Jason

0

Per quanto posso Dì, non c'è distinzione funzionale tra i tuoi due esempi. In sostanza, il browser seleziona automaticamente il primo option.

Si veda, ad esempio, il risultato di

$('option:selected') 

sul tuo primo esempio.

Se si vuole veramente evitare che ciò accada, si hanno due opzioni. Il primo è introdurre un nuovo elemento vuoto nel select, in base alla risposta di Jason. L'altra opzione è deselezionare il valore selezionato automaticamente:

Cancella la selezione. Qualsiasi risultato di $('select').val() che non sia una stringa vuota sarà quindi un cambiamento da parte dell'utente.

-1

questo dovrebbe funzionare:

if($('#mySelect').find('[defaultSelected]').size()>0){/*do your stuff*/} 
1

La risposta approvato non sembra funzionare per me.

Ecco come lo faccio per verificare se sono state selezionate tutte le opzioni selezionate:

if($('select option:selected').length > 0) { 
/* Do your stuff here */ 
} 
Problemi correlati