2009-10-15 13 views
41

Actualmente estoy usando jQuery para devolver algunos resultados JSON. Una vez que se devuelven estos resultados, los estoy usando para completar previamente los campos en mi formulario.jQuery/Programmatically Seleccione una opción en Seleccionar cuadro

Sin embargo, necesito ayuda para preseleccionar elementos en un cuadro desplegable. Por ejemplo, tengo un cuadro de selección (esto se acorta):

<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> 

Y si mi valor JSON es:

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

¿Cómo puedo, usando jQuery, hacer que la opción con el valor '17: 00:00 'seleccionado?

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

jQuery 1.9 cambios esto desde .attr() para .prop(). He proporcionado una respuesta actualizada a continuación. – Joshua

Respuesta

69

actualización:

A partir de jQuery 1.9, jQuery ha actualizado cambió esta funcionalidad. El estado "seleccionado" de una opción es en realidad una propiedad, por lo tanto jQuery lo ha cambiado para usar el método .prop(). La sintaxis es muy similar y fácil de cambiar:

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

Ver http://api.jquery.com/prop/#entry-longdesc de por qué tiene que pasar true.


antigua jQuery

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

o

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

Buena respuesta. Probablemente también recomendaría la contabilidad para qué cuadro de selección así: $ ('# opción mySelect [valor = "17:00:00"]'). Attr ('seleccionado', 'seleccionado'); – Volomike

+0

Este código funciona perfecto cuando JSON es una palabra, pero cuando tiene un espacio en ella (dos palabras) rompe ... ¿alguna idea? $ ('# opciónSelSource [value =' + obj.DATA [0] [obj.COLUMNS.indexOf ('SOURCE')] + ']') attr ('selected', 'selected'); – user1431633

+0

necesario para rodearlo con comillas dobles ... $ ('# opción de selSource [value = \ "' + obj.DATA [0] [obj.COLUMNS.indexOf ('SOURCE')] + '\"]'). attr ('seleccionado', 'seleccionado'); – user1431633

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

Esto debe ser la respuesta aceptada.No entiendo el propósito de tener que husmear a través del Dom, realizar posibles manipulaciones de cadenas y, finalmente, configurar el valor de la propiedad. Simplemente tiene sentido cambiar el valor de la casilla de selección a menos que me falta algo ... – calcazar

9

Es sólo $("#startTime").val(start_time);

1

Por alguna razón para mí funciona así:

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

Creo que eso es equivalente a ejecutar '$ ('# startTime'). Val (toString (data [0] .start))' – thekingoftruth

9

ACTUALIZACIÓN

A partir de jQuery 1.9, jQuery ha actualizado esta funcionalidad. El estado "seleccionado" de una opción es en realidad una propiedad, por lo tanto jQuery lo ha cambiado para usar el método .prop(). La sintaxis es muy similar y fácil de cambiar:

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

Esto acaba de resolver un gran problema que estaba teniendo solo en Firefox y Safari. Chrome e IE8 se comportaban como se esperaba con '.attr()', pero los otros se estaban rompiendo. – krillgar

2

Información adicional para los usuarios de jQuery Mobile (1.3.0):

He aquí una similar example.

Si intenta el ejemplo anterior con jQuery 1.9.1 y 1.3.0 jQuery Mobile se puede ver que no funciona a menos que agregue un

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

tener eso en cuenta cuando se trabaja con jQuery Mobile. Me dio mucho dolor de cabeza

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

Obras para mí en jQuery 1.10

Cuestiones relacionadas