2009-08-14 17 views
42

¿Cómo puedo, usando jQuery, establecer el elemento "siguiente" de un elemento ya seleccionado como "seleccionado".jQuery Establecer la opción seleccionada utilizando Siguiente

Por ejemplo, si tengo:

<select> 
<option value="1" >Number 1</option> 
<option value="2" selected="selected">Number 2</option> 
<option value="3" >Number 3</option> 
<option value="4" >Number 4</option> 
</select> 

Podemos ver que el "número 2" está seleccionado, y el uso de jQuery, me gustaría establecer "Número 3" como seleccionado, y quitar el seleccionado "atributo" de "Número 2". Supongo que necesito usar el siguiente selector, pero no estoy muy seguro de cómo implementarlo.

+0

Hay otro hilo con mucha información sobre cómo obtener las opciones seleccionadas que fue útil (realmente me envió aquí). La banda de rodadura está aquí: http://stackoverflow.com/questions/1280499/jquery-set-select-index –

Respuesta

60
$('option:selected', 'select').removeAttr('selected').next('option').attr('selected', 'selected'); 

Salida código de trabajo aquí http://jsbin.com/ipewe/edit

+0

¿Se requiere eliminar el atributo del seleccionado actualmente? Podría estar equivocado, pero creo que no? La llamada '.attr' debe ser reemplazada por .prop para cualquier versión reciente de jquery, hasta donde yo sé, ¿verdad? – codeling

6

puede utilizar

$('option:selected').next('option') 

o

$('option:selected + option') 

y establecer el valor:

var nextVal = $('option:selected + option').val(); 
$('select').val(nextVal); 
115

Actualización:

A partir de jQuery 1.6 + se debe utilizar en lugar de prop()attr() en este caso.

La diferencia entre los atributos y las propiedades puede ser importante en situaciones específicas de . Antes de jQuery 1.6, el método .attr() a veces tenía en cuenta los valores de propiedad al recuperar algunos atributos, , lo que podría causar un comportamiento incoherente. A partir de jQuery 1.6, el método .prop() proporciona una forma de recuperar explícitamente valores de propiedad, mientras que .attr() recupera atributos.

var theValue = "whatever"; 
$("#selectID").val(theValue).prop('selected',true); 


respuesta original:

Si desea seleccionar el valor de la opción, con independencia de su posición (este ejemplo asume que tiene un ID para su selecto):

var theValue = "whatever"; 
$("#selectID").val(theValue).attr('selected',true); 

No es necesario "deseleccionar". Eso sucede automáticamente cuando seleccionas otro.

+0

Tu respuesta es una respuesta más completa. Lo cual casi un año después ha ayudado. Gracias. –

+4

Un año después sí, pero acabo de encontrar este código. Cometió un pequeño error al asumir que el elemento se deseleccionó automáticamente al seleccionar otro. Ese no es el caso cuando la lista de opciones es de selección múltiple. Solo quería señalarlo en caso de que alguien esperara ese comportamiento y se sintiera frustrado porque no funciona según lo anunciado. – SRM

+0

@SRM - Buen punto. Yo, personalmente, nunca trabajo con selecciones múltiples ... así que nunca se me pasó por la cabeza. Gracias por agregar la aclaración. – GtotheB

3

Y si desea especificar de seleccione ID:

$("#nextPageLink").click(function(){ 
    $('#myselect option:selected').next('option').attr('selected', 'selected'); 
    $("#myselect").change(); 
}); 

Si hace clic sobre el tema con id "nextPageLink", se seleccionará la siguiente opción y el evento onchange() será llamado. Puede tener este aspecto:

$("#myselect").change(function(){ 
    $('#myDivId').load(window.location.pathname,{myvalue:$("select#myselect").val()}); 
}); 

OnChange() de eventos utiliza Ajax para cargar algo en div especificado.

window.location.nombre de ruta = dirección real

El evento OnChange() se define porque le permite cambiar el valor no solo usando el botón netx/prev, sino directamente mediante la selección estándar. Si se cambia el valor, la página hace algo automáticamente.

+0

+1 para indicar que ".change()" debe llamarse manualmente. No saberlo puede causar pesadillas. – everton

+0

El cambio fue mi problema, se seleccionó el valor pero no se muestra en el menú desplegable. – avgbody

0

buscar la fila, a continuación,

var row = $('#yourTable'); 

el valor que desee para seleccionar

var theValue = "5"; 
row.find("select:eq(2)").find("option[value="+theValue+']').attr('selected','selected'); 
0
$('#next').click(function(){ 
    $('#colored_background option:selected').next('option').attr('selected', 'selected'); 
    changeBackgroundColor(); 
}); 

Trabajar en What is my favorite color?. Haga clic en las flechas.

+0

¡Sitio genial! ¿Por qué no mapear la imagen y hacer que las diferentes piezas se puedan seleccionar de esa manera? – DevlshOne

17

partir de la versión 1.6.1 en adelante, es recomendable utilizar la hélice método para atributos booleanos/propiedades tales como seleccionado, de sólo lectura, habilitado, ...

var theValue = "whatever"; 
$("#selectID").val(theValue).prop('selected',true); 

Para obtener más información, consulte a http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/

1

Esto es lo que acaba de utilizar, me gusta lo limpio que es :-)

$('select').val(function(){ 
    var nextOption = $(this).children(':selected').next(); 
    return $(nextOption).val(); 
}).change(); 
0
$("select").prop("selectedIndex",$("select").prop("selectedIndex")+1) 
1
$('your_select option:selected').next('option').prop('selected', true) 
0
$('#my_sel').val($('#my_sel option:selected').next().val()); 
$('#my_sel').val($('#my_sel option:selected').prev().val()); 
Cuestiones relacionadas