JQuery: come selezionare l'elemento a discesa in base al valore


86

Voglio impostare un menu a discesa (seleziona) da modificare in base al valore delle voci.

io ho

<select id="mySelect">
  <option value="ps">Please Select</option>
  <option value="ab">Fred</option>
  <option value="fg">George</option>
  <option value="ac">Dave</option>
</select>

E so che voglio modificare il menu a discesa in modo che sia selezionata l'opzione con il valore "fg". Come posso farlo con JQuery?


Ho pensato che fosse così semplice, ma non sembrava funzionare. Immagino sia tempo di debug.
Mark W


1
Il tuo titolo è un po 'fuorviante. Non stai selezionando un menu a discesa, stai selezionando un'opzione in un menu a discesa ... ecco perché ci sono 7 risposte che non mi aiutano affatto ...
user1566694

@ user1566694 Se vuoi ottenere informazioni tecniche non è effettivamente chiamato un menu a discesa, è una "selezione"
Mark W

Risposte:


156

Dovresti usare

$('#dropdownid').val('selectedvalue');

Ecco un esempio:

$('#dropdownid').val('selectedvalue');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id='dropdownid'>
    <option value=''>- Please choose -</option>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='selectedvalue'>There we go!</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
    <option value='5'>5</option>
</select>


21
D'accordo con sopra. Secondo il tuo codice, sarebbe$('#mySelect option[value="fg"]').attr('selected', true)
Martavis P.

Errore mio. Ho visto che in alcuni casi non funziona, ma chiaramente funziona nel violino.
Martavis P.

2
Vorrei solo stare attento con questo. Non attiva l'evento "change" sul tag <select>. Se non stai usando quell'evento, va bene.
Chad Fisher

2
@ChadFisher Se stai utilizzando l'evento di modifica, attivalo con$('#dropdownid').val('selectedvalue').trigger('change');
Liam

In effetti, la modifica del trigger aiuta quando hai scritto del codice di follow-up per eseguire determinate azioni come l'aggiornamento del modello, anche gli aggiornamenti del modello di visualizzazione di ASP.net si verificano sull'evento di modifica del DD. +1
Div Tiwari

23
$('#yourdropddownid').val('fg');

Facoltativamente,

$('select>option:eq(3)').attr('selected', true);

dov'è 3l'indice dell'opzione che desideri.

Dimostrazione dal vivo



8

Puoi usare questo codice jQuery che trovo facile da usare:

$('#your_id [value=3]').attr('selected', 'true');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="your_id" name="name" class="form-control input-md">
  <option value="1">Option #1</option>
  <option value="2">Option #2</option>
  <option value="3">Option #3</option>
  <option value="4">Option #4</option>
  <option value="5">Option #5</option>
  <option value="6">Option #6</option>
  <option value="7">Option #7</option>
</select>


7
 $('#mySelect').val('ab').change();

 // or

 $('#mySelect').val('ab').trigger("change");

1
o $ ('# mySelect'). val ('ab'). trigger ("change") ;; nel caso in cui stai usando il plugin select2.
Vaibhav Jain

1
.change () mi ha aiutato ad aggiornare il mio attributo del modello ASP.net MVC. Grazie per la risposta.
Div Tiwari

Grazie ... .trigger ('change') funziona perfettamente!
LUISAO

5

Puoi semplicemente usare:

$('#select_id').val('fg')


2

Potrebbe essere troppo tardi per rispondere, ma almeno qualcuno riceverà aiuto.

Puoi provare due opzioni:

Questo è il risultato quando si desidera assegnare in base al valore dell'indice, dove "0" è Indice.

 $('#mySelect').prop('selectedIndex', 0);

non usare "attr" poiché è deprecato con l'ultimo jquery.

Quando si desidera selezionare in base al valore dell'opzione, scegliere questo:

 $('#mySelect').val('fg');

dove "fg" è il valore dell'opzione


La selezione basata sull'indice viene utilizzata raramente, tuttavia è una buona opzione dato lo scenario in cui è stato scritto del codice generico per l'impostazione dei menu a discesa ei valori variano con i diversi DD. Grazie :).
Div Tiwari

1

$('#dropdownid').val('selectedvalue');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id='dropdownid'>
    <option value=''>- Please choose -</option>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='selectedvalue'>There we go!</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
    <option value='5'>5</option>
</select>


1

Questo codice ha funzionato per me:

$(function() {
    $('[id=mycolors] option').filter(function() { 
        return ($(this).text() == 'Green'); //To select Green
    }).prop('selected', true);
});

Con questo elenco di selezione HTML:

<select id="mycolors">
      <option value="1">Red</option>
      <option value="2">Green</option>
      <option value="3">Blue</option>
</select>

0

Ho una situazione diversa, in cui i valori dell'elenco a discesa sono già hardcoded. Ci sono solo 12 distretti, quindi il controllo dell'interfaccia utente di completamento automatico jQuery non è popolato da codice.

La soluzione è molto più semplice. Perché ho dovuto guadare altri post in cui si presumeva che il controllo venisse caricato dinamicamente, non trovavo ciò di cui avevo bisogno e poi finalmente l'ho capito.

Quindi, dove hai HTML come sotto, l'impostazione dell'indice selezionato è impostato in questo modo, nota la parte -input, che è in aggiunta all'id a discesa:

$('#project-locationSearch-dist-input').val('1');

                <label id="lblDistDDL" for="project-locationSearch-input-dist" title="Select a district to populate SPNs and PIDs or enter a known SPN or PID." class="control-label">District</label>
                <select id="project-locationSearch-dist" data-tabindex="1">
                    <option id="optDistrictOne" value="01">1</option>
                    <option id="optDistrictTwo" value="02">2</option>
                    <option id="optDistrictThree" value="03">3</option>
                    <option id="optDistrictFour" value="04">4</option>
                    <option id="optDistrictFive" value="05">5</option>
                    <option id="optDistrictSix" value="06">6</option>
                    <option id="optDistrictSeven" value="07">7</option>
                    <option id="optDistrictEight" value="08">8</option>
                    <option id="optDistrictNine" value="09">9</option>
                    <option id="optDistrictTen" value="10">10</option>
                    <option id="optDistrictEleven" value="11">11</option>
                    <option id="optDistrictTwelve" value="12">12</option>
                </select>

Qualcos'altro capito sul controllo Autocomplete è come disabilitarlo / svuotarlo correttamente. Abbiamo 3 controlli che lavorano insieme, 2 dei quali si escludono a vicenda:

//SPN
spnDDL.combobox({
    select: function (event, ui) {
        var spnVal = spnDDL.val();
        //fire search event
        $('#project-locationSearch-pid-input').val('');
        $('#project-locationSearch-pid-input').prop('disabled', true);
        pidDDL.empty(); //empty the pid list
    }
});
//get the labels so we have their tool tips to hand.
//this way we don't set id values on each label
spnDDL.siblings('label').tooltip();

//PID
pidDDL.combobox({
    select: function (event, ui) {
        var pidVal = pidDDL.val();
        //fire search event
        $('#project-locationSearch-spn-input').val('');
        $('#project-locationSearch-spn-input').prop('disabled', true);
        spnDDL.empty(); //empty the spn list
    }
});

Alcuni di questi vanno oltre lo scopo del post e non so dove metterli esattamente. Poiché questo è molto utile e ha richiesto del tempo per capirlo, viene condiviso.

Und anche ... per abilitare un controllo come questo, è (disabilitato, falso) e NON (abilitato, vero) - anche questo ha richiesto un po 'di tempo per capirlo. :)

L'unica altra cosa da notare, molto oltre al post, è:

    /*
Note, when working with the jQuery Autocomplete UI control,
the xxx-input control is a text input created at the time a selection
from the drop down is picked.  Thus, it's created at that point in time
and its value must be picked fresh.  Can't be put into a var and re-used
like the drop down list part of the UI control.  So you get spnDDL.empty()
where spnDDL is a var created like var spnDDL = $('#spnDDL);  But you can't
do this with the input part of the control.  Winded explanation, yes.  That's how
I have to do my notes or 6 months from now I won't know what a short hand note means
at all. :) 
*/
    //district
    $('#project-locationSearch-dist').combobox({
        select: function (event, ui) {
            //enable spn and pid drop downs
            $('#project-locationSearch-pid-input').prop('disabled', false);
            $('#project-locationSearch-spn-input').prop('disabled', false);
            //clear them of old values
            pidDDL.empty();
            spnDDL.empty();
            //get new values
            GetSPNsByDistrict(districtDDL.val());
            GetPIDsByDistrict(districtDDL.val());
        }
    });

Tutto condiviso perché ci è voluto troppo tempo per imparare queste cose al volo. Spero che questo sia utile.


Sei andato molto fuori tema qui. La domanda è una semplice modifica di una selezione basata sul suo valore con JQuery. Non sono coinvolti elementi dell'interfaccia utente.
Mark W


0

È possibile selezionare il valore dell'opzione a discesa in base al nome

// deom
jQuery("#option_id").find("option:contains('Monday')").each(function()
{
 if( jQuery(this).text() == 'Monday' )
 {
  jQuery(this).attr("selected","selected");
  }

});
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.