2012-01-26 15 views
15

Usando jQuery, estoy tratando de cambiar la opción seleccionada en un elemento SELECT para que coincida con otro valor de entrada:Safari no actualizará prestación de SELECT cuando se cambia la opción seleccionada a través de jQuery

$('#mySelect') 
    .find('option') 
     .filter(function() { 
      return this.text == $('#selectedRejectReason').val(); 
     }).attr('selected', true) 

Cuando la página se representa , y esto JS carreras, puedo ver que la actualización del DOM muy bien en inspector de la web de Safari:

<select>  
    <option value="label">Select Reason</option> 
<option value="Wrong Amount" selected="true">Wrong Amount</option> 
<option value="Wrong Time">Wrong Time</option> 
<option value="Wrong Place">Wrong Place</option> 
</select> 

Cuando se carga la página, por defecto, ninguna de las opciones tienen un atributo seleccionado ... por lo que el primer elemento está mostrando. Los incendios de jQuery, el DOM se actualiza, por lo que se ve como lo hace arriba, pero en Safari, todavía muestra 'SELECCIONAR RAZÓN' en la página. Esto funciona bien en Firefox.

¿Alguna idea de por qué? Parece un error de Safari. Por desgracia, está rompiendo nuestro sitio en un iPhone.

Al hacer algunas búsquedas, algunas personas parecen solucionar esto al actualizar de jQuery 1.6 a 1.7. Por desgracia, no tengo ese lujo en este momento. Pero si esa es la solución, ¿alguien sabe qué cambió que soluciona esto?

+2

que puedes usar '.prop' en lugar de' .attr' si está utilizando jQuery 1.6 o superior. –

+0

@Joseph por favor haz una respuesta para que pueda darte crédito! No tengo idea de por qué eso lo arregla, pero lo hace. Al observar el DOM, el marcado es el mismo, pero con PROP actualiza al menos la imagen. –

Respuesta

30

Desde jQuery 1.6, debe utilizar .prop:

$('#mySelect') 
    .find('option') 
    .filter(function() { 
     return this.text == $('#selectedRejectReason').val(); 
    }) 
    .prop('selected', true); 

Tome un vistazo a la documentación de jQuery: http://api.jquery.com/prop/

+0

que lo hizo! En cuanto a los documentos, parece ser un problema de configuración frente a recuperación (configuración 'prop'). –

+2

gracias gracias ¡gracias! solo me gustaría encontrar esto hace una hora ...:/ – jabram

+0

Descubrí que no solo debe usar .prop, no puede usar la versión .attr anterior. Intenté usar ambos para actualizar el DOM y el marcado, pero si la versión .attr es lo primero, el menú desplegable no se actualiza en Safari, aunque ambas líneas tienen éxito. .prop solo o .prop luego .attr funciona. – xr280xr

Cuestiones relacionadas