Come impostare la prima opzione su una casella di selezione usando jQuery?


134

Ho due selectcaselle HTML . Devo ripristinare una selectcasella quando faccio una selezione in un'altra.

<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>

Quando seleziono un'opzione del primo select(cioè id="name"), devo reimpostare il secondo selectsu select all; allo stesso modo, quando seleziono un'opzione del secondo select(cioè id="name2"), devo reimpostare il primo selectsu select all.

Come lo posso fare?


Ho cambiato il titolo da [...] reset [...] a [...] impostare la prima opzione su [...] perché reset implica l'impostazione del valore caricato inizialmente predefinito
Pierre de LESPINAY

Risposte:


277

Qualcosa del genere dovrebbe fare il trucco: https://jsfiddle.net/TmJCE/898/

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


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

15
È vero, ma mostra ancora il concetto di base e in questo caso sembra che voglia reimpostarlo su "Seleziona tutto", che è la prima opzione.
Jack,

2
Se lo usi da un <button>elemento, assicurati di non impostare type="reset". Non ha funzionato per me fino a quando non ho impostato il tipo subutton
Caumons

3
Seleziono il primo elemento del menu a discesa ma il testo è ancora quello vecchio.
Va

Sto usando questo come resto del riquadro di selezione va bene? o non lo capisco correttamente?
ankit suthar,

1
@ankitsuthar Cambia l'opzione selezionata di selectnel valore fornito. select.prop('selectedIndex', 0)la reimposterà sulla prima opzione, select.prop('selectedIndex', 1)la imposterà sulla seconda opzione.
Jack,

44

Se vuoi solo ripristinare l'elemento select nella sua prima posizione, il modo più semplice potrebbe essere:

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

Per ripristinare tutti gli elementi selezionati nel documento:

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

EDIT: per chiarire come da un commento qui sotto, questo reimposta l'elemento select alla sua prima voce vuota e solo se esiste una voce vuota nell'elenco.


Sì, questo funzionerebbe quasi sempre. Altre soluzioni possono talvolta presentare problemi. Il modo più semplice davvero.
Sworup Shakya,

5
Solo un avvertimento: funzionerà solo se vuoi davvero avere la prima opzione selezionata e la prima opzione ha un set di valori vuoto. Se la tua prima opzione ha qualche altro valore o se nessuna opzione nella casella SELEZIONA ha un valore vuoto, questo non influirà su alcuna modifica. Oppure, se qualche altra opzione ha un valore vuoto, selezionerà invece quell'opzione.
HBlackorby,

@HBlackorby, il tuo commento è stato utile, ma 1) L'opzione con value=""può apparire in qualsiasi ordine. 2) Un'opzione senza un attributo value ie <option></option>non è la stessa di un'opzione con un attributo value stringa vuota ie <option value=""></option>, e hai chiarito che abbiamo bisogno della value="" parte 3) Anche se non ce ne sono <option>con un valore stringa vuota; l'impostazione .val('')"influirà sul cambiamento", la selezione sembrerà diventare vuota, non è vero? Almeno nel mio Chrome ...
The Red Pea,

21

Come sottolineato da @PierredeLESPINAY nei commenti, la mia soluzione originale non era corretta: ripristinava il menu a discesa sull'opzione più in alto, ma solo perché il undefinedvalore restituito si risolveva nell'indice 0.

Ecco una soluzione corretta, che tiene selectedconto della proprietà:

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

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


Risposta originale - INCORRETTA

In jQuery 1.6+ è necessario utilizzare il .propmetodo per ottenere la selezione predefinita:

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

Per ripristinarlo in modo dinamico quando cambia il primo menu a discesa, utilizzare l' .changeevento:

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

cosa ha detto Jens Roland, con il supporto viceversa ^^ jsfiddle.net/weg82/2
zynaps

Ma il supporto viceversa non ha senso - Ciò equivale a un grande menu a discesa. Non capisco
Jens Roland,

è sufficiente scrivere$('#name2').val( $(this).prop('defaultSelected') );
vsync il

@vsync: si $(this)riferisce $('#name'), no $('#name2'), quindi no
Jens Roland,

1
defaultSelectedè una <option>proprietà, tornerà sempre undefinedin un<select>
Pierre de LESPINAY il

7

Utilizzare questo se si desidera ripristinare la selezione sull'opzione che ha l'attributo "selezionato". Funziona in modo simile alla funzione javascript incorporata form.reset () per la selezione.

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

4

Questo mi aiuta molto.

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

4

Ecco come l'ho fatto funzionare se vuoi solo riportarlo alla tua prima opzione, ad esempio "Scegli un'opzione" "Select_id_wrap" è ovviamente il div attorno alla selezione, ma voglio solo chiarirlo nel caso in cui abbia qualsiasi influenza su come funziona. Il mio si reimposta su una funzione clic, ma sono sicuro che funzionerà anche all'interno di una modifica ...

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

3

Usa il codice qui sotto. Guardalo funzionare qui http://jsfiddle.net/usmanhalalit/3HPz4/

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

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

Ancora una volta - funziona solo se l'impostazione predefinita è fissa come la prima / vuota
Jens Roland,

3

Questo può anche essere usato

$('#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

Questo è il modo più flessibile / riutilizzabile per ripristinare tutte le caselle selezionate nel modulo.

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

1

Ecco come gestirlo con un elemento di opzione casuale definito come valore predefinito (in questo caso il testo 2 è il valore predefinito):

<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

Puoi provare questo:

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

0

Ho avuto un problema con l'uso della proprietà defaultSelected nella risposta di @Jens Roland in jQuery v1.9.1. Un modo più generico (con molte selezioni dipendenti) sarebbe quello di inserire un attributo predefinito di dati nelle selezioni dipendenti e quindi scorrere attraverso di essi durante il ripristino.

<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>

E il javascript ...

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

Vedi http://jsfiddle.net/8hvqN/ per una versione funzionante di quanto sopra.


0

Ho creato una nuova opzione nel tag select che ha un valore di stringa vuota ("") e ho usato:

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

0

Utilizzare jquery per associare l'evento onchange per selezionare ma non è necessario creare un altro $(this)oggetto 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

Utilizzare questo codice per ripristinare tutti i campi di selezione sull'opzione predefinita, in cui è definito l'attributo selezionato.

<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

Ecco la migliore soluzione che sto usando. Questo vale per oltre 1 slectbox

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


0

L'impostazione dell'opzione 1 nell'elemento select può essere effettuata da questo segmento. Per mostrarlo visivamente, alla fine devi aggiungere .trigger ('change').

$('#name').removeAttr('selected').find('option:first').attr('selected', 'selected').trigger("change");
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.