¿Cómo configurar la primera opción en un cuadro de selección usando jQuery?


134

Tengo dos selectcuadros HTML . Necesito restablecer un selectcuadro cuando hago una selección en otro.

<select id="name" >
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name2" >
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

Cuando selecciono una opción de la primera select(es decir id="name"), necesito restablecer la segunda selecta select all; de manera similar, cuando selecciono una opción de la segunda select(es decir id="name2"), necesito restablecer la primera selecta select all.

¿Cómo puedo hacer eso?


Cambié el título de restablecer [...] para establecer [...] la primera opción [...] porque restablecer implica establecer el valor predeterminado inicialmente cargado
— Pierre de LESPINAY,

Respuestas:


277

Algo como esto debería hacer el truco: https://jsfiddle.net/TmJCE/898/

$('#name2').change(function(){
    $('#name').prop('selectedIndex',0);
});


$('#name').change(function(){
    $('#name2').prop('selectedIndex',0);
});

15
Es cierto, pero aún muestra el concepto básico, y en este caso parece que quiere restablecerlo a "Seleccionar todo", que es la primera opción.
— Jack

2
Si usa esto desde un <button>elemento, asegúrese de no configurarlo type="reset". No funcionó para mí hasta que configuré el tipo abutton
— Caumons

3
Selecciono el primer elemento del menú desplegable, pero el texto sigue siendo el antiguo.
— VaTo

Estoy usando esto como resto del cuadro de selección, ¿está bien? o no lo estoy entendiendo correctamente?
— ankit suthar

1
@ankitsuthar Cambiará la opción seleccionada de selectal valor proporcionado. select.prop('selectedIndex', 0)restablecerá la primera opción, la select.prop('selectedIndex', 1)establecerá en la segunda opción.
— Jack

44

Si solo desea restablecer el elemento de selección a su primera posición, la forma más simple puede ser:

$('#name2').val('');

Para restablecer todos los elementos seleccionados en el documento:

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

EDITAR: para aclarar según un comentario a continuación, esto restablece el elemento de selección a su primera entrada en blanco y solo si existe una entrada en blanco en la lista.


Sí, esto funcionaría casi todo el tiempo. Otras soluciones a veces pueden tener problemas. La forma más simple de hecho.
— Sworup Shakya

55
Solo una advertencia: esto solo funcionará si realmente desea tener la primera opción seleccionada y la primera opción tiene un conjunto de valores en blanco. Si su primera opción tiene algún otro valor o si ninguna opción en el cuadro SELECCIONAR tiene un valor en blanco, esto no afectará ningún cambio. O, si alguna otra opción tiene un valor en blanco, seleccionará esa opción.
— HBlackorby

@HBlackorby, su comentario fue útil, pero 1) La opción con value=""puede aparecer en cualquier orden. 2) Una opción sin un atributo de valor, <option></option>es decir, no es lo mismo que una opción con un atributo de valor de cadena vacía <option value=""></option>, es decir , y usted dejó en claro que necesitamos la value="" parte 3) Incluso si no hay <option>un valor de cadena vacía; la configuración .val('')"afectará el cambio", la selección aparecerá para cambiar a blanco, ¿no es así? Al menos en mi Chrome ...
— The Red Pea

21

Como señaló @PierredeLESPINAY en los comentarios, mi solución original era incorrecta: restablecería el menú desplegable a la opción superior, pero solo porque el undefinedvalor de retorno se resolvió en el índice 0.

Aquí hay una solución correcta, que tiene selecteden cuenta la propiedad:

$('#name').change(function(){
    $('#name2').val(function () {
        return $(this).find('option').filter(function () {
            return $(this).prop('defaultSelected');
        }).val();
    });
});

DEMO : http://jsfiddle.net/weg82/257/


Respuesta original - INCORRECTA

En jQuery 1.6+ necesita usar el .propmétodo para obtener la selección predeterminada:

// Resets the name2 dropdown to its default value
$('#name2').val( $('#name2').prop('defaultSelected') );

Para restablecerlo dinámicamente cuando cambie el primer menú desplegable, use el .changeevento:

$('#name').change(function(){
  $('#name2').val( $('#name2').prop('defaultSelected') );
});

lo que dijo Jens Roland, con el apoyo de viceversa ^^ jsfiddle.net/weg82/2
— zynaps

Pero viceversa, el soporte no tiene sentido: eso es equivalente a un gran menú desplegable. No lo entiendo
— Jens Roland

basta con escribir$('#name2').val( $(this).prop('defaultSelected') );
— vsync

@vsync: se $(this)refiere a $('#name'), no $('#name2'), así que no
— Jens Roland

1
defaultSelectedes una <option>propiedad, siempre volverá undefineden un<select>
— Pierre de LESPINAY

7

Use esto si desea restablecer la selección a la opción que tiene el atributo "seleccionado". Funciona de manera similar a la función JavaScript incorporada form.reset () a la selección.

 $("#name").val($("#name option[selected]").val());

4

Esto me ayuda mucho.

$(yourSelector).find('select option:eq(0)').prop('selected', true);

4

Así es como lo hice funcionar si solo desea volver a su primera opción, por ejemplo, "Elegir una opción" "Select_id_wrap" es obviamente el div alrededor de la selección, pero solo quiero dejar eso en claro en caso de que haya alguna relación con cómo funciona esto. El mío se restablece a una función de clic, pero estoy seguro de que funcionará dentro de un cambio también ...

$("#select_id_wrap").find("select option").prop("selected", false);

3

Usa el siguiente código. Véalo trabajando aquí http://jsfiddle.net/usmanhalalit/3HPz4/

 $(function(){
     $('#name').change(function(){
         $('#name2 option[value=""]').attr('selected','selected');
     });

     $('#name2').change(function(){
         $('#name option[value=""]').attr('selected','selected');
     });
 });

Nuevamente, solo funciona si el valor predeterminado es fijo como el primero / vacío
— Jens Roland

3

Esto también se puede usar

$('#name2').change(function(){
    $('#name').val('');//You can set the first value of first one if that is not empty
});


$('#name').change(function(){
    $('#name2').val('');
});

3

Esta es la forma más flexible / reutilizable de restablecer todos los cuadros de selección en su formulario.

      var $form = $('form') // Replace with your form selector
      $('select', $form).each(function() {
        $(this).val($(this).prop('defaultSelected'));
      });

1

Aquí se explica cómo manejarlo con un elemento de opción aleatorio definido como el valor predeterminado (en este caso, el Texto 2 es el predeterminado):

<select id="name2" >
   <option value="">select all</option>
   <option value="1">Text 1</option>
   <option value="2" selected="selected">Text 2</option>
   <option value="3">Text 3</option>
</select>
<script>
    $('#name2 option[selected]').prop('selected', true);
</script>

0

Puedes probar esto:

$( 'select' ).each( function () {
    if ( $( this ).children().length > 0 ) {
        $( $( this ).children()[0] ).attr( 'selected', 'selected' );
        $( this ).change();
    }
} );

0

Tuve un problema al usar la propiedad defaultSelected en la respuesta de @Jens Roland en jQuery v1.9.1. Una forma más genérica (con muchas selecciones dependientes) sería poner un atributo de datos por defecto en sus selecciones dependientes y luego iterar a través de ellas al restablecer.

<select id="name0" >
    <option value="">reset</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name1" class="name" data-default="1">
    <option value="">select all</option>
    <option value="1" selected="true">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name2" class="name" data-default="2">
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2" selected="true">Text 2</option>
    <option value="3">Text 3</option>
</select>

Y el javascript ...

$('#name0').change(function(){
    if($('#name0').val() == '') {
        $('select.name').each(function(index){
          $(this).val($(this).data('default'))  
        })
    } else {
      $('select.name').val($('#name0').val() );
    }
});

Consulte http://jsfiddle.net/8hvqN/ para obtener una versión funcional de lo anterior.


0

Creé una nueva opción en la etiqueta de selección que tiene un valor de cadena vacía ("") y usé:

$("form.query").find('select#topic').val("");

0

Use jquery para vincular el evento onchange para seleccionar, pero no necesita crear otro $(this)objeto jquery.

$('select[name=name2]').change(function(){
    if (this.value) {
        console.log('option value = ', this.value);
        console.log('option text  = ', this.options[this.selectedIndex].text);

        // Reset selected
        this.selectedIndex = this.defaultSelected;
    }
});

0

Use este código para restablecer todos los campos de selección a la opción predeterminada, donde se define el atributo seleccionado.

<select id="name1" >
    <option value="1">Text 1</option>
    <option value="2" selected="selected" >Default Text 2</option>
    <option value="3">Text 3</option>
</select>
<select id="name2" >
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3" selected="selected" >Default Text 3</option>
</select>
<script>
    $('select').each( function() {
        $(this).val( $(this).find("option[selected]").val() );
    });
</script>

0

Aquí está la mejor solución que estoy usando. Esto aplicará para más de 1 slectbox

$("select").change(function(){
    var thisval = $(this).val();
    $("select").prop('selectedIndex',0);
    $(this).val(thisval);
})


0

La configuración de la opción 1 en el elemento de selección se puede hacer por este segmento. Para mostrarlo visualmente, tiene tp add .trigger ('change') al final.

$('#name').removeAttr('selected').find('option:first').attr('selected', 'selected').trigger("change");
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.