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>
Dios mio
fuente

Respuestas:

957
$("#target").val($("#target option:first").val());
David Andres
fuente
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);
Esben
fuente
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');
usuario149513
fuente
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.

Jimmy Huang
fuente
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");
James Lee Baker
fuente
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;
danactive
fuente
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).

Bradley Bossard
fuente
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')
Melanie
fuente
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;

});
Nick Petropoulos
fuente
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

Tan simple como eso:

$('#target option:first').prop('selected', true);
Ramon Schmidt
fuente
1
esto es mucho mejor
Arun Prasad ES
7
$('#newType option:first').prop('selected', true);
FFFFFF
fuente
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');
Francis Lewis
fuente
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.

Darth Jon
fuente
5

Así es como lo haría:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');
Fabrizio
fuente
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');
Pablo SG Pacheco
fuente
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.

Gary - ITB
fuente
2

¡Esto funcionó para mí!

$("#target").prop("selectedIndex", 0);
Archana Kamath
fuente
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');
Matthew Scott
fuente
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(); });

Jean Douglas
fuente
1

Utilizar:

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

Encuentre el trabajo simple en este JSFiddle .

Chetan
fuente
¿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());
Muhammad Qasim
fuente
0
$("#target").val(null);

funcionó bien en cromo

Krishna Murthy
fuente
0

Si está almacenando el objeto jQuery del elemento select:

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

...

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

Marque este mejor enfoque usando jQuery con ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});
jdnichollsc
fuente
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()); 
Arsman Ahmad
fuente
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)
Hitesh Kalwani
fuente
-1

Utilizar:

alert($( "#target option:first" ).text());
GobsYats
fuente