Cómo hacer que la primera opción de <seleccionar> seleccionada con jQuery


548

¿Cómo hago la primera opción de seleccionado con jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Respuestas:


957
$("#target").val($("#target option:first").val());

364
Debe notarse que esto se hace más fácilmente con $ ("# target") [0] .selectedIndex = 0;
David Andres

17
Funciona, pero se basa en el valor del primer elemento , si el primer elemento contiene un valor vacío, seleccionará el elemento CON valor más cercano
evilReiko

2
Parece funcionar muy bien, excepto para IE6. Inseguro de 7-8, funciona en 9.
Nicholi

3
Me retracto de mi declaración anterior, me estaba adelantando. $ ("# target"). val ("opción: primero"); funciona casi en todas partes excepto IE6 $ ("target"). val ($ ("# target option: first"). val ()); funcionará en IE6, porque literalmente está buscando el primer valor e ingresándolo como valor del objetivo. Dos búsquedas de identificación en lugar de una.
Nicholi

2
Y en realidad es necesario para IE6, 7 y 8. Mientras que .val ('opción: primero') funciona en IE9 (y Safari y Firefox y Chrome y Opera).
Nicholi

178

Puedes probar esto

$("#target").prop("selectedIndex", 0);

2
Esto no funciona correctamente en todos los casos. Tengo un menú desplegable en cascada padre / hijo. Seleccione padre # 1, muestre hijo # 1, seleccione padre # 2 muestre hijo # 2. Cada vez que seleccionen un nuevo padre, el niño correspondiente debe volver a la primera opción. Esta solución no hace esto. Deja el menú secundario "pegajoso". Consulte la opción: solución selected.prop ('selected', false) / option: first.prop ('selected', 'selected') en esta pregunta para obtener la respuesta que funciona en más escenarios.
Lance Cleveland

Esto no activa el evento onChange. Al menos en cromo.
Tomasz Mularczyk

¡Gracias! Esta es la primera respuesta en la lista de respuestas que me funcionó.
Casey Crookston

66
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Romesh, ¿cómo puedo establecer selectedIndex base en el valor?
Junior Frogie

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
Buen segundo enfoque. Agregue el valor del atributo seleccionado. Por ejemplo, attr ("seleccionado", "seleccionado"). Sin este parámetro adicional, la selección no se realiza.
David Andres

@EgorPavlikhin: acabo de editar la respuesta para incluir el código JQuery para eliminar el indicador "seleccionado" de cualquier opción que ya haya sido seleccionada. Ahora la respuesta es correcta :)
jmort253

20
No hay necesidad de la eachfunción, debería ser: $('#target option[selected="selected"]').removeAttr('selected')también ahora debería usarse con removePropy en su proplugar.
vsync

Una versión más completa de la respuesta de James Lee Baker en otra parte sobre esta pregunta, aunque agrega ciclos de cálculo que pueden no ser necesarios si la interfaz está bien administrada.
Lance Cleveland el

65

Cuando usas

$("#target").val($("#target option:first").val());

esto no funcionará en Chrome y Safari si el valor de la primera opción es nulo.

yo prefiero

$("#target option:first").attr('selected','selected');

porque puede funcionar en todos los navegadores.


3
También debe "anular la selección" de los elementos seleccionados previamente para que esto funcione en más casos. Vea la respuesta de James Lee Baker para más detalles.
Lance Cleveland

44

Cambiar el valor de la entrada de selección o ajustar el atributo seleccionado puede sobrescribir la propiedad por defecto seleccionadaOpciones del elemento DOM, lo que da como resultado un elemento que puede no restablecerse correctamente en una forma que ha llamado al evento de restablecimiento.

Use el método de utilería de jQuery para borrar y establecer la opción necesaria:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
Perfecto. Tengo menús desplegables en cascada. Cuando un usuario selecciona la opción principal 2 y luego la opción secundaria 3, no quiero que se "pegue". En otras palabras, el usuario selecciona el padre # 1, luego vuelve a seleccionar el padre # 2. Cuando eso sucede, quiero que el menú secundario se restablezca a la primera opción (que es "Cualquiera" en mi caso). Todas las otras soluciones aquí fallan en Firefox v19 y Chrome en Linux.
Lance Cleveland

33
$("#target")[0].selectedIndex = 0;

1
Esto no funcionará en los casos en que un menú desplegable tenga un elemento preseleccionado. Vea mis comentarios sobre la respuesta seleccionada para más detalles.
Lance Cleveland

21

Un punto sutil creo haber descubierto sobre las respuestas más votadas es que, a pesar de que cambian correctamente el valor seleccionado, no actualizan el elemento que ve el usuario (solo cuando hacen clic en el widget verán un cheque al lado del elemento actualizado).

Encadenar una llamada .change () al final también actualizará el widget de la interfaz de usuario.

$("#target").val($("#target option:first").val()).change();

(Tenga en cuenta que me di cuenta de esto al usar jQuery Mobile y una caja en el escritorio de Chrome, por lo que este puede no ser el caso en todas partes).


Encadenar una llamada .change () al final también actualizará el widget de la interfaz de usuario.
codemirror

17

Si ha deshabilitado las opciones, puede agregar no ([deshabilitado]) para evitar seleccionarlas, lo que da como resultado lo siguiente:

$("#target option:not([disabled]):first").attr('selected','selected')

1
Buen punto sobre las opciones deshabilitadas. Buena adición a las respuestas presentadas!
Lance Cleveland

16

Otra forma de restablecer los valores (para múltiples elementos seleccionados) podría ser esto:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

44
+1 en realidad es una buena respuesta, pero podría haberlo hecho más específico para el dominio de la pregunta; en lugar de $("selector")usted podría haber escrito$('#target')
Ja͢ck


7
$('#newType option:first').prop('selected', true);

Esto funciona solo si no hay opciones ya seleccionadas. Ver la respuesta de James Lee Baker.
Webars

6

Descubrí que solo establecer attr selected no funciona si ya hay un atributo seleccionado. El código que uso ahora primero desarmará el atributo seleccionado, luego seleccionará la primera opción.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

Esto funciona bien y es muy similar a la respuesta de James Lee Baker anotada en otra parte sobre esta pregunta. Me gusta la otra respuesta con option: selected y option: first como la ejecución de option: first probablemente sea más rápido (computacionalmente) que find ().
Lance Cleveland el

5

Aunque cada función probablemente no sea necesaria ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

funciona para mi.


5

Así es como lo haría:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
Esto funciona bien y es muy similar a la respuesta de James Lee Baker anotada en otra parte sobre esta pregunta. Me gusta la otra respuesta con option: selected y option: first como la ejecución de option: first probablemente sea más rápido (computacionalmente) que find ().
Lance Cleveland

2

Solo funcionó para mí usando un disparador ('cambio') al final, así:

$("#target option:first").attr('selected','selected').trigger('change');

2

Si va a utilizar la primera opción como predeterminada, como

<select>
    <option value="">Please select an option below</option>
    ...

entonces puedes usar:

$('select').val('');

Es lindo y simple.



1

En el reverso de la respuesta de James Lee Baker, prefiero esta solución, ya que elimina la dependencia del soporte del navegador para: primero: seleccionado ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

Para mí solo funcionó cuando agregué el siguiente código:

.change();

Para mí, solo funcionó cuando agregué el siguiente código: como quería "restablecer" el formulario, es decir, seleccionar todas las primeras opciones de todas las selecciones del formulario, utilicé el siguiente código:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

Utilizar:

$("#selectbox option:first").val()

Encuentre el trabajo simple en este JSFiddle .


¿Qué tal la posición 15, 25 o con texto específico? : D
Marcelo Agimóvel

Llamar .val()solo obtiene el valor de la primera opción en la lista. En realidad, no selecciona (hacer seleccionado) la primera opción, como se hizo en la pregunta original.
Funka

1

Para mí, solo funcionó cuando agregué la siguiente línea de código

$('#target').val($('#target').find("option:first").val());


0

Si está almacenando el objeto jQuery del elemento select:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

Marque este mejor enfoque usando jQuery con ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});

0

Puede seleccionar cualquier opción dropdownusándola.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

Reemplace la identificación con una identificación de etiqueta de selección particular e indexe con el elemento particular que desea seleccionar.

es decir

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Así que aquí para la selección del primer elemento usaré el siguiente código:

$('select#ddlState').val($('#ddlState option')[0].value)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.