2012-10-03 19 views
6

Al hacer clic en un botón, quiero cambiar la opción seleccionada en una lista de selección para que se corresponda con el botón al que se hizo clic. Esto es lo que tengo hasta ahora, jsfiddleAl cambiar la opción seleccionada en el botón, haga clic en

$('#btnCityAuckland').click(function(){ 
    $('#City').val('A'); 
}) 

tengo algunas jQuery allí, pero probablemente sus millas de tener la razón, ya que no puede ser tan simple.

Respuesta

14
$('#btnAuckland').click(function(){ 
    $('#City').val('A').trigger('change'); 
})​ 

Aparentemente puede llamar al método .trigger() después de establecer el valor.

Demostración: http://jsfiddle.net/8RUBj/11/

EDITAR
Además, es mejor si se utiliza data atributos para establecer el valor, y las clases, y entonces usted puede hacer todos los botones de una sola vez.

$('.select-change').click(function(){ 
    $('#City').val($(this).data('val')).trigger('change'); 
})​ 

demostración v2: http://jsfiddle.net/8RUBj/15/

+0

Exactamente lo que estaba buscando. No he visto .trigger() usado antes. Aprendí algo nuevo :) ¡Muchísimas gracias! – Jamesil

+0

@Jamesil - verifica la actualización. Es mucho más útil. – ahren

3

Su código es correcto, sólo que haya cometido un error $('#btnCityAuckland'), lo que realmente es:

$('#btnAuckland') 

Trabajando demo

También podría automatizar la selección de la opción basada en el botón se hace clic, en lugar de codificar las identificaciones , así:

$('div > a').click(function(){ //click handler for all city buttons 
    $("#City option:contains('"+$(this).text()+"')").attr("selected",true); 
    $("#City").selectmenu('refresh', true); //Refresh to show name on select 
})​ 

Trabajando demo

+0

sí, el valor cambia, pero no es un cambio visible. (la selección no se actualiza y debe activarse manualmente. Gracias jQuery Mobile.) – ahren

+0

Gracias Nelson, y estoy totalmente de acuerdo ahren. – Jamesil

+0

@Jamesil He agregado la llamada de actualización necesaria para que la selección elija el cambio. Puedes verlo en mi último código, mira mi respuesta actualizada. – Nelson

1

Si no se está usando jQuery Mobile su código funcionaría como es. Con jQuery Mobile puede realizar la actualización pseudo-seleccione llamando .selectmenu("refresh") en ella de la siguiente manera:

$('div[data-role="controlgroup"] a').click(function(){ 
     $('#City').val($(this).text().charAt(0)).selectmenu("refresh"); 
}); 

Demostración: http://jsfiddle.net/8RUBj/18/

Tenga en cuenta que no es necesario asignar un controlador de clic por separado para cada botón: con fines de demostración, he mostrado una forma bastante torpe de hacer que el código sea más genérico, de modo que funcione sin cambiar su html, pero podría agregar atributos data- o algo similar a los botones para indicar qué valor está asociado con cada uno.

More information about jQuery Mobile select methods.

+0

+1 - ¡no notó la correlación entre el primer carácter y el valor seleccionado! – ahren

+0

Gracias @ahren. Obviamente, la primera letra no funcionaría si hubiera ciudades adicionales comenzando con la misma letra, ya que tendrían que tener diferentes valores en la selección, pero como dije antes, eso fue solo una demostración de una forma de hacer el código. más genérico ... – nnnnnn

Cuestiones relacionadas