Tengo un cuadro de selección:
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
<option value="3">Number 3</option>
<option value="4">Number 4</option>
<option value="5">Number 5</option>
<option value="6">Number 6</option>
<option value="7">Number 7</option>
</select>
Me gustaría establecer una de las opciones como "seleccionada" en función de su índice seleccionado.
Por ejemplo, si estoy tratando de establecer el "Número 3", estoy intentando esto:
$('#selectBox')[3].attr('selected', 'selected');
Pero esto no funciona. ¿Cómo puedo configurar una opción como seleccionada en función de su índice usando jQuery?
¡Gracias!
jquery
jquery-selectors
BoltClock
fuente
fuente
Respuestas:
NOTA : la respuesta depende de jQuery 1.6.1+
Gracias por el comentario,
.get
no funcionará ya que devuelve un elemento DOM, no uno jQuery. Tenga en cuenta que la.eq
función también se puede usar fuera del selector si lo prefiere.También puede ser más conciso / legible si desea usar el valor , en lugar de confiar en seleccionar un índice específico :
Nota:
.val(3)
funciona también para este ejemplo, pero los valores no numéricos deben ser cadenas, por lo que elegí una cadena para mantener la coherencia.(por ejemplo,
<option value="hello">Number3</option>
requiere que lo use.val("hello")
)fuente
.prop()
lugar de hacerlo.attr()
.Esto también puede ser útil, así que pensé en agregarlo aquí.
Si desea seleccionar un valor basado en el valor del elemento y no en el índice de ese elemento, puede hacer lo siguiente:
Tu lista de selección:
El jquery:
El elemento seleccionado sería "Número 2" ahora.
fuente
.attr('selected', 'selected')
no debe usarse varias veces en la misma selección, ya que algunos navegadores pueden confundirse (en algunos casos comienzan a marcar varios elementos en el dom comoselected=selected"
. Si necesita cambiar el valor seleccionado con más frecuencia (por ejemplo, en un botón haga clic) use.prop('selected', true)
según lo sugerido por Marc. - ¡Simplemente ha tenido mucho dolor - y ha perdido el tiempo - debido a este problema!Intenta esto en su lugar:
fuente
Aún más simple:
fuente
cuando desee seleccionar con las mejores formas de selección de conjuntos, puede usar
$('#select option').removeAttr('selected');
para eliminar selecciones anteriores.fuente
Lo importante es comprender que
val()
para unselect
elemento devuelve el valor de la opción seleccionada, pero no el número de elemento como lo haceselectedIndex
en javascript.Para seleccionar la opción con
value="7"
simplemente puede usar:Para anular la selección de la opción, use una matriz vacía:
Y, por supuesto, puede seleccionar varias opciones *:
* Sin embargo, para seleccionar varias opciones, su
<select>
elemento debe tener unMULTIPLE
atributo, de lo contrario no funcionará.fuente
Siempre he tenido problemas con la utilería ('seleccionado'), lo siguiente siempre me ha funcionado:
fuente
Prueba esto:
Finalmente, desencadena un evento .change:
fuente
Espero que esto pueda ayudar también
fuente
seleccione 3ra opción
Ejemplo en jsfiddle
fuente
NÓTESE BIEN:
es incorrecto, la deferencia de la matriz obtiene el objeto dom, no un objeto jquery, por lo que fallará con un TypeError, por ejemplo en FF con: "$ ('# selectBox option') [3] .attr () no es una función ".
fuente
Para aclarar las respuestas de Marc y John Kugelman, puede usar:
get()
no funcionará si se usa de la manera especificada porque obtiene el objeto DOM, no un objeto jQuery, por lo que la siguiente solución no funcionará:eq()
gets filtra el conjunto jQuery al del elemento con el índice especificado. Es más claro que$($('#selectBox option').get(3))
. No es tan eficiente.$($('#selectBox option')[3])
es más eficiente (ver caso de prueba ).Sin embargo, en realidad no necesita el objeto jQuery. Esto hará el truco:
http://api.jquery.com/get/
http://api.jquery.com/eq/
Otro punto de vital importancia:
El atributo "seleccionado" no es cómo se especifica un botón de opción seleccionado (en Firefox y Chrome al menos). Use el atributo "marcado":
Lo mismo ocurre con las casillas de verificación.
fuente
En 1.4.4 se obtiene un error: $ ("# selectBox option") [3] .attr no es una función
Esto funciona:
$('#name option:eq(idx)').attr('selected', true);
Donde
#name
es select id yidx
es el valor de la opción que desea seleccionar.fuente
El atributo puro javascript selectedIndex es la forma correcta de hacerlo porque es puro javascript y funciona en varios navegadores:
Aquí hay una demostración de jsfiddle con dos menús desplegables que usan uno para configurar el otro:
También puede llamar a esto antes de cambiar el índice seleccionado si lo que desea es el atributo "seleccionado" en la etiqueta de opción ( aquí está el violín ):
fuente
fuente
A menudo uso el disparador ('cambio') para que funcione
Ejemplo con id select = selectA1 y position_index = 0 (primera opción en select):
fuente
Al usar lo anterior, seguía recibiendo errores en webkit (Chrome) diciendo:
"Error de tipo no capturado: el objeto # no tiene el método 'attr'"
Esta sintaxis detiene esos errores.
fuente
Seleccione el elemento en función del valor en la lista de selección (especialmente si los valores de la opción tienen un espacio o un carácter extraño) simplemente haciendo esto:
Además, si tiene un menú desplegable (en lugar de una selección múltiple), es posible que desee hacer una
break;
para no sobrescribir el primer valor encontrado.fuente
Necesito una solución que no tenga valores codificados en el archivo js; utilizando
selectedIndex
. La mayoría de las soluciones dadas fallaron en un navegador. Esto parece funcionar en FF10 e IE8 (¿alguien más puede probarlo en otras versiones)fuente
Si solo desea seleccionar un elemento basado en una propiedad particular de un elemento, la opción jQuery de tipo [prop = val] obtendrá ese elemento. Ahora no me importa el índice, solo quería el elemento por su valor.
fuente
Me enfrenté al mismo problema. Primero debe pasar por los eventos (es decir, qué evento está ocurriendo primero).
Por ejemplo:
El primer evento está generando un cuadro de selección con opciones.
El segundo evento es seleccionar la opción predeterminada usando cualquier función como val () etc.
Debe asegurarse de que el segundo evento ocurra después del primer evento .
Para lograr esto, tome dos funciones, digamos generateSelectbox () (para generar cuadro de selección) y selectDefaultOption ()
Debe asegurarse de que selectDefaultOption () se invoque solo después de la ejecución de generateSelectbox ()
fuente
También puede iniciar varios valores si su cuadro de selección es un múltiplo:
fuente
puede establecer el valor de la variable selectoption dinámicamente y se seleccionará la opción. Puede intentar con el siguiente código
código:
CÓDIGO HTML:
fuente
Dentro de poco:
$("#selectBox").attr("selectedIndex",index)
donde index es el índice seleccionado como entero.
fuente