2009-10-15 18 views
41

Attualmente sto utilizzando jQuery per restituire alcuni risultati JSON. Una volta restituiti questi risultati, li sto utilizzando per precompilare i campi nel mio modulo.jQuery/Seleziona in modo programmatico un'opzione nella casella di selezione

Tuttavia, ho bisogno di aiuto nella preselezione degli elementi in una casella a discesa. Per esempio, ho una casella di selezione (questa è accorciata):

<select id="startTime"> 
<option value="14:00:00">2:00 pm</option> 
<option value="15:00:00">3:00 pm</option> 
<option value="16:00:00">4:00 pm</option> 
<option value="17:00:00">5:00 pm</option> 
<option value="18:00:00">6:00 pm</option> 
</select> 

E se il mio valore JSON è:

var start_time = data[0].start // Let's say this is '17:00:00' 

Come posso, utilizzando jQuery, rendere l'opzione con un valore '17: 00:00 'selezionato?

<option value="17:00:00" selected="selected">5:00 pm</option> 
+1

jQuery 1.9 cambia questo da .attr() per .prop(). Ho fornito una risposta aggiornata di seguito. – Joshua

risposta

69

aggiornamento:

Come di jQuery 1.9, jQuery ha aggiornato cambiato questa funzionalità. Lo stato "selezionato" di un'opzione è in realtà una proprietà, pertanto jQuery lo ha modificato per utilizzare il metodo .prop(). La sintassi è molto simile e facile da cambiare:

$('#startTime option[value=17:00:00]').prop('selected', true); 

Vedi http://api.jquery.com/prop/#entry-longdesc del motivo per cui ha bisogno di passare true.


più vecchio jQuery

$('#startTime option[value=17:00:00]').attr('selected', 'selected'); 

o

$('#startTime option[value='+ data[0].start +']').attr('selected', 'selected'); 
+11

Buona risposta. Probabilmente raccomanderei anche di tenere conto di quale casella di selezione fosse così: $ ('# opzione mySelect [valore = "17:00:00"]'). Attr ('selezionato', 'selezionato'); – Volomike

+0

Questo codice funziona perfettamente quando JSON è una parola, ma quando ha uno spazio in essa (due parole) si rompe ... qualche idea? $ ('# opzione selSource [valore =' + obj.DATA [0] [obj.COLUMNS.indexOf ('SOURCE')] + ']'). attr ('selected', 'selected'); – user1431633

+0

necessario per circondarlo con virgolette doppie ... $ ('# opzione selSource [valore = \ "' + obj.DATA [0] [obj.COLUMNS.indexOf ('SOURCE')] + '\"]'). attr ('selected', 'selected'); – user1431633

30
$('#startTime').val(start_time); 
+4

Questa deve essere la risposta accettata.Non capisco lo scopo di dover annusare il Dom, eseguire possibili manipolazioni di stringhe e, in definitiva, impostare il valore della proprietà. Ha senso cambiare il valore della casella di selezione a meno che manchi qualcosa .. – calcazar

9

E 'solo $("#startTime").val(start_time);

1

Per qualche motivo per me funziona così:

$('#startTime').val(''+data[0].start+''); 
+1

Credo che sia equivalente all'esecuzione di '$ ('# startTime'). Val (toString (data [0] .start))' – thekingoftruth

9

UPDATE

A partire da jQuery 1.9, jQuery ha aggiornato questa funzionalità. Lo stato "selezionato" di un'opzione è in realtà una proprietà, pertanto jQuery lo ha modificato per utilizzare il metodo .prop(). La sintassi è molto simile e facile da cambiare:

$('option[value=17:00:00]').prop('selected', 'selected'); 
+0

Questo ha risolto un enorme problema che avevo solo in Firefox e Safari. Chrome e IE8 si comportavano come previsto con '.attr()', ma gli altri si stavano rompendo. – krillgar

2

Informazioni aggiuntive per gli utenti mobili jQuery (1.3.0):

Ecco un similar example.

Se si tenta l'esempio precedente con jQuery 1.9.1 e jQuery 1.3.0 cellulare si può vedere che non funziona a meno che non si aggiunge un

$("#location_list").selectmenu("refresh"); 

tenere a mente quando si lavora con jQuery Mobile. Mi ha dato un sacco di mal di testa

1
var varValue="17:00:00"; 
$("#startTime").ready(function(){ 
    $("#startTime option[value='"+varValue+"']").prop("selected", "selected"); }); 

Opere per me su jQuery 1.10

Problemi correlati