Come posso impostare il valore di un DropDownList usando jQuery?


349

Come dice la domanda, come posso impostare il valore di un controllo DropDownList usando jQuery?

Risposte:


602
$("#mydropdownlist").val("thevalue");

assicurati solo che il valore nei tag delle opzioni corrisponda al valore nel metodo val.


Ho un validatore di intervallo rispetto a un elenco a discesa e sto impostando il valore dell'elenco a discesa come descritto sopra, ma il validatore di intervallo continua a non dirmi di selezionare un valore (quando il valore selezionato rientra nell'intervallo). Si prega di consultare la mia domanda stackoverflow.com/questions/3165033/…
James

21
Ciò non attiva l'evento "modifica".
AGamePlayer

4
Volevo ripetere: assicurati di avere impostato l'attributo "valore", altrimenti questo metodo non funzionerà. (Stavo aiutando qualcuno che mi ha mostrato questo e mi chiedevo perché non lo selezionasse tramite il testo nell'elenco a discesa.) Volevo assicurarmi che fosse chiaro.
JasCav,

1
+1 Ho dovuto chiamare $("#mycontrolId").selectmenu('refresh');per riflettere i cambiamenti
VladL

informazioni dettagliate a questo link htmlgoodies.com/beyond/javascript/…
Niamath

52

Se lavori con l'indice puoi impostare l'indice selezionato direttamente con .attr ():

$("#mydropdownlist").attr('selectedIndex', 0);

Questo lo imposterà sul primo valore nella lista a discesa.

Modifica: il modo in cui l'ho fatto sopra funzionava. Ma sembra che non lo faccia più.

Ma come sottolinea così piacevolmente Han nei commenti, il modo corretto per farlo è:

$("#mydropdownlist").get(0).selectedIndex = index_here;

7
Ora, questo non funziona affatto perché il selecttag non ha alcun attributo denominato selectedIndex. È invece una proprietà dell'oggetto DOM. Quindi il codice dovrebbe essere:$("#mydropdownlist").get(0).selectedIndex = index_here;
Han

5
$("#mydropdownlist").prop('selectedIndex', index_here); Funziona anche.
numaroth,

("#mydropdownlist"). get (0) .selectedIndex = index_here; così funzionava !! @
Kasim,

Ottimo modo per cambiare selezionato nel menu a discesa, Grazie
Avtandil Kavrelishvili

Sento un po 'di aggressività passiva nella risposta
Dheeraj,

49

Come suggerito da @Nick Berardi, se il valore modificato non si riflette sul front-end dell'interfaccia utente, provare:

$("#mydropdownlist").val("thevalue").change();

1
grazie mille, solo una riga, pulita e utile per aumentare anche l'evento change () di un SelectBox usando jQuery e Laravel Forms.
WhySoSerious

Questa è l'unica risposta in cui la modifica è stata effettivamente visualizzata nel menu a discesa. selectmenuè indefinito nella mia versione di jQuery, ma change()fa il trucco.
Chad Hedgcock,

Grazie. Questo è stato l'unico modo in cui ha funzionato per me (dopo aver provato tutto il resto al di sopra di questo).
ispirato l'

20

Prova questo approccio molto semplice:

/*make sure that value is included in the options value of the dropdownlist 
e.g. 
(<select><option value='CA'>California</option><option value='AK'>Alaska</option>      </select>)
*/

$('#mycontrolId').val(myvalue).attr("selected", "selected");

2
non dimenticare di chiamare$("#mycontrolId").selectmenu('refresh');
VladL

@VladL Quindi vuoi dire $('#mycontrolId').selectmenu('refresh').val(myvalue).attr("selected", "selected");?
Dylan Czenski,

9

Se il menu a discesa è il menu a discesa Asp.Net, il codice sottostante funzionerà correttamente,

 $("#<%=DropDownName.ClientID%>")[0].selectedIndex=0;

Ma se DropDown è un menu a discesa HTML, questo codice funzionerà.

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

5

Migliore risposta alla domanda:

$("#comboboxid").val(yourvalue).trigger("chosen:updated");

per esempio:

$("#CityID").val(20).trigger("chosen:updated");

o

$("#CityID").val("chicago").trigger("chosen:updated");

3

imposta il valore e aggiorna l' evento dell'elenco a discesa

$("#id").val("1234").change();

2

Ci sono molti modi per farlo. Ecco qui alcuni di loro:

$("._statusDDL").val('2');

O

$('select').prop('selectedIndex', 3);

1
Il tuo profilo indica che sei associato al link che hai incluso qui. Il collegamento a qualcosa a cui sei affiliato (ad esempio un prodotto o un sito Web) senza rivelare che l'affiliazione nel tuo post è considerata spam su Stack Exchange / Stack Overflow. Vedi: Cosa significa autopromozione "buona"? , alcuni suggerimenti e consigli sull'autopromozione , Qual è la definizione esatta di "spam" per StackTranslate.it? e cosa rende spam qualcosa .
Makyen,

1

Penso che questo possa aiutare:

    $.getJSON('<%= Url.Action("GetDepartment") %>', 
              { coDepartment: paramDepartment },
              function(data) {
                    $(".autoCompleteDepartment").empty();
                    $(".autoCompleteDepartment").append($("<option />").val(-1));
                    $.each(data, function() {
                        $(".autoCompleteDepartment").append($("<option />").val(this.CodDepartment).text(this.DepartmentName));
                    });
                    $(".autoCompleteDepartment").val(-1);                                       
              }  
             );

Se lo fai in questo modo, aggiungi un elemento senza testo. Quindi, quando si fa clic su combo, non viene visualizzato, ma il valore -1 è stato aggiunto in un secondo momento con $ (". AutoCompleteDepartment"). Val (-1); ti consente di controllare se la combo ha un valore valido.

Spero che aiuti qualcuno.

Mi scusi per il mio inglese.


1

Se devi solo impostare il valore di un menu a discesa, il modo migliore è

$("#ID").val("2");

Se devi attivare uno script dopo aver aggiornato il valore del menu a discesa come Se hai impostato un evento onChange nel menu a discesa e desideri eseguirlo dopo aver aggiornato il menu a discesa di quanto devi utilizzare in questo modo

$("#ID").val("2").change();

0

Ecco una funzione creata per impostare rapidamente l'opzione selezionata:

function SetSelected(elem, val){
        $('#'+elem+' option').each(function(i,d){
        //  console.log('searching match for '+ elem + '  ' + d.value + ' equal to '+ val);
            if($.trim(d.value).toLowerCase() == $.trim(val).toLowerCase()){
        //      console.log('found match for '+ elem + '  ' + d.value);
                $('#'+elem).prop('selectedIndex', i);
            }
        });
    }

Chiamare questa funzione con id elemento argomento e valore selezionato; come questo:

SetSelected('selectID','some option');

È utile quando ci sono molte opzioni selezionate da impostare.


0

Nel caso in cui carichi tutto <options ....></options>con una chiamata Ajax,
segui questi passaggi per farlo.

1). Crea un metodo separato per impostare il valore del menu a discesa
Ad esempio:

function set_ip_base_country(countryCode)
    $('#country').val(countryCode)
} 

2). Chiama questo metodo quando ajax chiama con successo tutte le attività di accodamento HTML completate

Per esempio:

success: function (doc) {
  .....
  .....
  $("#country").append('<option style="color:black;" value="' + key + '">'  +   value + '</option>')
  set_ip_base_country(ip_base_country)
}

0

Imposta il drop-down selectedvalore e aggiorna le modifiche

$("#PR2DistrictId option[value='@Model.PR2DistrictId']").attr("selected", true).trigger("chosen:updated")

Qui impostiamo prima il valore da Modele poi lo aggiorniamo su scelto


0

// Formato HTML dell'elenco a discesa.

<select id="MyDropDownList">
<option value=test1 selected>test1</option>
<option value=test2>test2</option>
<option value=test3>test3</option>
<option value=test4>test4</option>

// Se si desidera modificare l'elemento selezionato in test2 utilizzando javascript. Prova questo. // imposta l'opzione successiva che desideri selezionare

var NewOprionValue = "Test2"

        var RemoveSelected = $("#MyDropDownList")[0].innerHTML.replace('selected', '');
        var ChangeSelected = RemoveSelected.replace(NewOption, NewOption + 'selected>');
        $('#MyDropDownList').html(ChangeSelected);

0

Utilizzando la risposta evidenziata / selezionata sopra ha funzionato per me ... ecco un po 'di intuizione. Ho tradito un po 'per ottenere l'URL, ma fondamentalmente sto definendo l'URL nel Javascript, e quindi impostandolo tramite la risposta jquery dall'alto:

<select id="select" onChange="window.location.href=this.value">
    <option value="">Select a task </option>
    <option value="http://127.0.0.1:5000/choose_form/1">Task 1</option>
    <option value="http://127.0.0.1:5000/choose_form/2">Task 2</option>
    <option value="http://127.0.0.1:5000/choose_form/3">Task 3</option>
    <option value="http://127.0.0.1:5000/choose_form/4">Task 4</option>
    <option value="http://127.0.0.1:5000/choose_form/5">Task 5</option>
    <option value="http://127.0.0.1:5000/choose_form/6">Task 6</option>
    <option value="http://127.0.0.1:5000/choose_form/7">Task 7</option>
    <option value="http://127.0.0.1:5000/choose_form/8">Task 8</option>
</select>
<script>
    var pathArray = window.location.pathname.split( '/' );
    var selectedItem = "http://127.0.0.1:5000/" + pathArray[1] + "/" + pathArray[2];
    var trimmedItem = selectedItem.trim();
    $("#select").val(trimmedItem);
</script>

0

Per le persone che utilizzano Bootstrap, utilizzare $(#elementId').selectpicker('val','elementValue')invece di $('#elementId').val('elementValue'), poiché quest'ultimo non aggiorna il valore nell'interfaccia utente.

Nota : anche la .change()funzione funziona, come suggerito sopra in alcune risposte, ma attiva la $('#elementId').change(function(){ //do something })funzione.

Pubblicando semplicemente questo post per le persone che fanno riferimento a questa discussione in futuro.

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.