Hay varias maneras de hacer esto, pero el enfoque más limpio se ha perdido entre las principales respuestas y un montón de argumentos val()
. También algunos métodos cambiaron a partir de jQuery 1.6, por lo que esto necesita una actualización.
Para los siguientes ejemplos, asumiré que la variable $select
es un objeto jQuery que apunta a la <select>
etiqueta deseada , por ejemplo, a través de lo siguiente:
var $select = $('.selDiv .opts');
Nota 1: use val () para las coincidencias de valor:
Para la coincidencia de valores, usar val()
es mucho más simple que usar un selector de atributos: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
La versión setter de .val()
se implementa en las select
etiquetas configurando la selected
propiedad de una coincidencia option
con la misma value
, por lo que funciona bien en todos los navegadores modernos.
Nota 2 - use prop ('selected', true):
Si desea establecer el estado seleccionado de una opción directamente, puede usar prop
(no attr
) con un boolean
parámetro (en lugar del valor de texto selected
):
por ejemplo, https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Nota 3: permita valores desconocidos:
Si usa val()
para seleccionar un <option>
, pero el valor no coincide (puede suceder dependiendo de la fuente de los valores), entonces se selecciona "nada" y $select.val()
volverá null
.
Entonces, para el ejemplo que se muestra, y en aras de la robustez, podría usar algo como esto https://jsfiddle.net/1250Ldqn/ :
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Nota 4 - coincidencia exacta del texto:
Si desea hacer coincidir el texto exacto, puede usar una filter
función con. por ejemplo, https://jsfiddle.net/yz7tu49b/2/ :
var $select = $('.selDiv .opts');
$select.children().filter(function(){
return this.text == "Selection 2";
}).prop('selected', true);
aunque si tiene espacio en blanco adicional, puede agregar un recorte al cheque como en
return $.trim(this.text) == "some value to match";
Nota 5 - coincidencia por índice
Si desea hacer coincidir por índice, simplemente indexe los elementos secundarios de la selección, por ejemplo, https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Aunque tiendo a evitar las propiedades DOM directas a favor de jQuery hoy en día, a un código a prueba de futuro, eso también podría hacerse como https://jsfiddle.net/yz7tu49b/5/ :
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Nota 6: use change () para activar la nueva selección
En todos los casos anteriores, el evento de cambio no se dispara. Esto es por diseño para que no termines con eventos de cambio recursivo.
Para generar el evento de cambio, si es necesario, simplemente agregue una llamada al objeto .change()
jQuery select
. Por ejemplo, el primer ejemplo más simple se convierte en https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
También hay muchas otras formas de encontrar los elementos utilizando selectores de atributos, como [value="SEL2"]
, pero debe recordar que los selectores de atributos son relativamente lentos en comparación con todas estas otras opciones.
$("#my_select").val("the_new_value").change();
... ... de tan