Aggiunta di opzioni a <select> utilizzando jQuery?


739

Qual è il modo più semplice per aggiungere un optiona un menu a discesa usando jQuery?

Funzionerà?

$("#mySelect").append('<option value=1>My option</option>');

26
Oppure utilizzare $("#mySelect").html(....)per sostituire le opzioni correnti con quelle nuove.
Dan Diplo,

Risposte:


267

Questo NON ha funzionato in IE8 (eppure in FF):

$("#selectList").append(new Option("option text", "value"));

Questo lavoro DID:

var o = new Option("option text", "value");
/// jquerify the DOM object 'o' so we can use the html method
$(o).html("option text");
$("#selectList").append(o);

1
Ho avuto problemi con IE8, ma il tuo codice ha funzionato per me, grazie!
Alexandre L Telles,

Assicurarsi inoltre che display: table;è non applicato come stile al select-elemento. Questo romperà il codice js
Gundon,

1
Se sei interessato, ecco il bug relativo al modo in cui Options non funziona con append () funziona in FireFox, Chrome, ma non in IE: bugs.jquery.com/ticket/1641
JackDev

2
+1 - Ha funzionato per me senza dover "incantare" l'oggetto. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Agosto

C'è un modo per aggiungere valori "data-xxx" a questo?
Pedro Joaquín,

817

Personalmente, preferisco questa sintassi per aggiungere opzioni:

$('#mySelect').append($('<option>', {
    value: 1,
    text: 'My option'
}));

Se stai aggiungendo opzioni da una raccolta di elementi, puoi effettuare le seguenti operazioni:

$.each(items, function (i, item) {
    $('#mySelect').append($('<option>', { 
        value: item.value,
        text : item.text 
    }));
});

23
questo sarà piuttosto lento se aggiungi molte opzioni, rispetto alla semplice creazione di una stringa html e alla sua aggiunta
Fai clic su Aggiorna

3
Funziona in IE a differenza di molte soluzioni
DancesWithBamboo

3
@Ropitems={option1:{value:1,text:1},option2:{value:2,text:2}}
gamliela,

4
grazie @dule, ma come posso selezionare una nuova opzione per impostazione predefinita?
Lord_JABA,

11
{selezionato: vero}
jmadsen

115

È possibile aggiungere un'opzione usando la sintassi seguente, inoltre è possibile visitare l' opzione way handle in jQuery per maggiori dettagli.

  1. $('#select').append($('<option>', {value:1, text:'One'}));

  2. $('#select').append('<option value="1">One</option>');

  3. var option = new Option(text, value); $('#select').append($(option));


1
il primo dovrebbe cambiare in $ ("# SectionNames"). append ($ ('<option>', {value: 1, text: "one"})
EthenHY,

1
Il secondo ha un attributo errato nel tag opzione ( valueanziché val). Il codice corretto dovrebbe essere$('select').append('<option value="1">One</option>');
todd

Grazie Dipu :))
Fox,

45

Se il nome o il valore dell'opzione è dinamico, non dovrai preoccuparti di sfuggire a caratteri speciali; in questo potresti preferire semplici metodi DOM:

var s= document.getElementById('mySelect');
s.options[s.options.length]= new Option('My option', '1');

1
Non mi sembra così semplice !!
Fai clic su Aggiorna

27
Questo è semplice in termini di JavaScript, jquery ha reso le cose troppo facili per le persone
DWolf

document.getElementById ('mySelect'). add (nuova opzione ('My option', '1')); // se IE8 o migliore
Hafthor,

34

Opzione 1-

Puoi provare questo-

$('#selectID').append($('<option>',
 {
    value: value_variable,
    text : text_variable
}));

Come questo-

for (i = 0; i < 10; i++)
{ 
     $('#mySelect').append($('<option>',
     {
        value: i,
        text : "Option "+i 
    }));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id='mySelect'></select>

Opzione 2-

Oppure prova questo-

$('#selectID').append( '<option value="'+value_variable+'">'+text_variable+'</option>' );

Come questo-

for (i = 0; i < 10; i++)
{ 
     $('#mySelect').append( '<option value="'+i+'">'+'Option '+i+'</option>' );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id='mySelect'></select>


20

Questo è molto semplice:

$('#select_id').append('<option value="five" selected="selected">Five</option>');

o

$('#select_id').append($('<option>', {
                    value: 1,
                    text: 'One'
                }));

18

Funziona bene

Se aggiungo più di un elemento opzione, consiglierei di eseguire l'appendice una volta anziché eseguire un'appendice su ciascun elemento.


18

per qualsiasi motivo, fare $("#myselect").append(new Option("text", "text"));in IE7 + non funziona

Ho dovuto usare $("#myselect").html("<option value='text'>text</option>");


Sto usando la stessa sintassi (nuova opzione (...) sul browser Android Chrome (su un telefono) e non funziona neanche lì.
Raddevus,

15

Per migliorare le prestazioni, dovresti provare a modificare il DOM solo una volta, ancora di più se aggiungi molte opzioni.

var html = '';

for (var i = 0, len = data.length; i < len; ++i) {
    html.join('<option value="' + data[i]['value'] + '">' + data[i]['label'] + '</option>');
}           

$('#select').append(html);

1
per aiutare le prestazioni che dovresti usare string.join()per concatenare le stringhe
mfeineis,

1
Questa è un'ottima soluzione Ho avuto un problema con "join ()" nell'esempio non essendo una funzione valida, ma questa soluzione ti consente di utilizzare una "promessa" di jQuery per determinare quando tutte le opzioni sono state aggiunte e il DOM è stato aggiornato. Con le altre soluzioni che aggiungono le opzioni una per una, ciò non può essere fatto così facilmente. Sostituisci l'ultima riga nell'esempio con quanto segue per eseguire un'azione solo dopo il completamento della modifica DOM: $ .when ($ ('# select'). Append (html)). Done (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Americus,

13
$('#mySelect').empty().append('<option value=1>My option</option>').selectmenu('refresh');

8
A meno che non mi sbagli, questa soluzione non richiede solo jQuery, ma anche jQueryUI. selectmenu()non fa parte del core jQuery ed è un widget jQueryUI . Questo la rende una soluzione piuttosto pesante, no?
tatlar,

13

Mi piace usare un approccio non jquery:

mySelect.add(new Option('My option', 1));

3
Mi piace essere non jquery;) Non vederlo troppo spesso
Dakkaron,

3
Sì, e anche se non posso mettere in discussione il potere jquery, ci sono casi che non semplificano le cose.
caiohamamura,

11

È possibile aggiungere opzioni in modo dinamico nel menu a discesa, come mostrato nell'esempio seguente. Qui in questo esempio ho preso i dati dell'array e li ho associati al menu a discesa come mostrato nello screenshot dell'output

Produzione:

inserisci qui la descrizione dell'immagine

var resultData=["Mumbai","Delhi","Chennai","Goa"]
$(document).ready(function(){
   var myselect = $('<select>');
     $.each(resultData, function(index, key) {
	     myselect.append( $('<option></option>').val(key).html(key) );
       });
      $('#selectCity').append(myselect.html());
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js">
</script>

<select  id="selectCity">

</select>


9

Non menzionato in nessuna risposta ma utile è il caso in cui si desidera selezionare anche questa opzione, è possibile aggiungere:

var o = new Option("option text", "value");
o.selected=true;
$("#mySelect").append(o);

1
Grazie, dovevo preselezionare un'opzione generata da JSON e questo ha funzionato bene.
Georg Patscheider,

9
var select = $('#myselect');
var newOptions = {
                'red' : 'Red',
                'blue' : 'Blue',
                'green' : 'Green',
                'yellow' : 'Yellow'
            };
$('option', select).remove();
$.each(newOptions, function(text, key) {
    var option = new Option(key, text);
    select.append($(option));
});

5

Ci sono due modi. Puoi usare uno di questi due.

Primo:

$('#waterTransportationFrom').append('<option value="select" selected="selected">Select From Dropdown List</option>');

Secondo:

$.each(dataCollecton, function(val, text) {            
    options.append($('<option></option>').val(text.route).html(text.route));
});

3

Se si desidera inserire la nuova opzione in un indice specifico nella selezione:

$("#my_select option").eq(2).before($('<option>', {
    value: 'New Item',
    text: 'New Item'
}));

Ciò inserirà il "Nuovo elemento" come terzo elemento nella selezione.


3

È possibile aggiungere e impostare l'attributo Value con il testo:

$("#id").append($('<option></option>').attr("value", '').text(''));
$("#id").append($('<option></option>').attr("value", '4').text('Financial Institutions'));

3

Abbiamo riscontrato qualche problema quando aggiungi un'opzione e usi jquery validate. È necessario fare clic su un elemento nell'elenco di selezione multipla. Aggiungerai questo codice per gestire:

$("#phonelist").append("<option value='"+ 'yournewvalue' +"' >"+ 'yournewvalue' +"</option>");

$("#phonelist option:selected").removeAttr("selected"); // add to remove lase selected

$('#phonelist option[value=' + 'yournewvalue' + ']').attr('selected', true); //add new selected

https://i.stack.imgur.com/HOjIY.png


3

Cosa ne pensi di questo

var numbers = [1, 2, 3, 4, 5];
var option = '';

for (var i=0;i<numbers.length;i++){
     option += '<option value="'+ numbers[i] + '">' + numbers[i] + '</option>';
    }

    $('#items').append(option);

2

Questo è solo un punto rapido per le migliori prestazioni

sempre quando hai a che fare con molte opzioni, costruisci una grande stringa e poi aggiungila a 'select' per le migliori prestazioni

fg

var $ mySelect = $ ('# mySelect'); var str = '';

$.each(items, function (i, item) {
    // IMPORTANT: no selectors inside the loop (for the best performance)
    str += "<option value='" + item.value + "'> " + item.text + "</option>";
});
// you built a big string

$mySelect.html(str); // <-- here you add the big string with a lot of options into the selector.
$mySelect.multiSelect('refresh');

Ancora più veloce

var str = ""; 
for(var i; i = 0; i < arr.length; i++){
    str += "<option value='" + item[i].value + "'> " + item[i].text + "</option>";
}    
$mySelect.html(str);
$mySelect.multiSelect('refresh');

2
$(function () {
     var option = $("<option></option>");
     option.text("Display text");
     option.val("1");
     $("#Select1").append(option);
});

Se stai ricevendo dati da un oggetto, quindi inoltra l'oggetto per farlo funzionare ...

$(function (product) {
     var option = $("<option></option>");
     option.text(product.Name);
     option.val(product.Id);
     $("#Select1").append(option);
});

Nome e ID sono nomi di proprietà dell'oggetto ... quindi puoi chiamarli come preferisci ... E ovviamente se hai Array ... vuoi costruire una funzione personalizzata con for loop ... e poi chiamare quella funzione in documento pronto ... Saluti


2

Sulla base della risposta di Dule per l'aggiunta di una raccolta di articoli, un one-linerfor...in farà anche miracoli:

let cities = {'ny':'New York','ld':'London','db':'Dubai','pk':'Beijing','tk':'Tokyo','nd':'New Delhi'};

for(let c in cities){$('#selectCity').append($('<option>',{value: c,text: cities[c]}))}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<select  id="selectCity"></select>

Sia i valori degli oggetti che gli indici sono assegnati alle opzioni. Questa soluzione funziona anche nel vecchio jQuery (v1.4) !


1

se hai optgroup all'interno selezionare , hai un errore in DOM.

Penso che il modo migliore:

$("#select option:last").after($('<option value="1">my option</option>'));

1

Puoi provare sotto il codice per aggiungere all'opzione

  <select id="mySelect"></select>

    <script>
          $("#mySelect").append($("<option></option>").val("1").html("My enter code hereoption"));
    </script>

1
$('#select_id').append($('<option>',{ value: v, text: t }));

1

Questo è il modo in cui l'ho fatto, con un pulsante per aggiungere ogni tag di selezione.

$(document).on("click","#button",function() {
   $('#id_table_AddTransactions').append('<option></option>')
}

Dovrebbe essere$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Bariq Dharmawan il

Sì, hai ragione. La mia risposta non ha incluso la dichiarazione pronta perché mi sono concentrato su ciò che ha risolto il problema.
Ronald Valera Santana,

1

Puoi farlo in ES6:

$.each(json, (i, val) => {
    $('.js-country-of-birth').append(`<option value="${val.country_code}"> ${val.country} </option>`);
  });

1

Se qualcuno viene qui alla ricerca di un modo per aggiungere opzioni con proprietà dei dati

Utilizzando attr

var option = $('<option>', { value: 'the_value', text: 'some text' }).attr('family', model.family);

Utilizzo dei dati - versione aggiunta 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
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.