Adding options to a <select> using jQuery?

JavascriptJqueryHtml Select

Javascript Problem Overview


What's the easiest way to add an option to a dropdown using jQuery?

Will this work?

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

Javascript Solutions


Solution 1 - Javascript

Personally, I prefer this syntax for appending options:

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

If you're adding options from a collection of items, you can do the following:

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

Solution 2 - Javascript

This did NOT work in IE8 (yet did in FF):

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

This DID work:

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

Solution 3 - Javascript

You can add option using following syntax, Also you can visit to way handle option in jQuery for more details.

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

Solution 4 - Javascript

If the option name or value is dynamic, you won't want to have to worry about escaping special characters in it; in this you might prefer simple DOM methods:

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

Solution 5 - Javascript

Option 1-

You can try this-

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

Like this-

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>

Option 2-

Or try this-

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

Like this-

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>

Solution 6 - Javascript

This is very simple:

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

or

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

Solution 7 - Javascript

That works well.

If adding more than one option element, I'd recommend performing the append once as opposed to performing an append on each element.

Solution 8 - Javascript

for whatever reason doing $("#myselect").append(new Option("text", "text")); isn't working for me in IE7+

I had to use $("#myselect").html("<option value='text'>text</option>");

Solution 9 - Javascript

To help performance you should try to only alter the DOM once, even more so if you are adding many options.

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

Solution 10 - Javascript

Why not simply?

$('<option/>')
  .val(optionVal)
  .text('some option')
  .appendTo('#mySelect')

Solution 11 - Javascript

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

Solution 12 - Javascript

I like to use non jquery approach:

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

Solution 13 - Javascript

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

Solution 14 - Javascript

You can add options dynamically into dropdown as shown in below example. Here in this example I have taken array data and binded those array value to dropdown as shown in output screenshot

Output:

enter image description here

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>

Solution 15 - Javascript

Not mentioned in any answer but useful is the case where you want that option to be also selected, you can add:

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

Solution 16 - Javascript

If you want to insert the new option at a specific index in the select:

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

This will insert the "New Item" as the 3rd item in the select.

Solution 17 - Javascript

There are two ways. You can use either of these two.

First:

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

Second:

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

Solution 18 - Javascript

You can append and set the Value attribute with text:

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

Solution 19 - Javascript

> How about this

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

Solution 20 - Javascript

if u have optgroup inside select, u got error in DOM.

I think a best way:

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

Solution 21 - Javascript

We found some problem when you append option and use jquery validate. You must click one item in select multiple list. You will add this code to handle:

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

Solution 22 - Javascript

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

Solution 23 - Javascript

This is just a quick points for best performance

always when you are dealing with many options, build a big string and then add it to the 'select' for best performance

f.g.

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');

Even faster

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');

Solution 24 - Javascript

This is the way i did it, with a button to add each select tag.

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

Solution 25 - Javascript

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

If you getting data from some object, then just forward that object to function...

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

Name and Id are names of object properties...so you can call them whatever you like...And ofcourse if you have Array...you want to build custom function with for loop...and then just call that function in document ready...Cheers

Solution 26 - Javascript

You can do this in ES6:

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

Solution 27 - Javascript

Based on dule's answer for appending a collection of items, a one-liner for...in will also work wonders:

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>

Both object values and indexes are assigned to the options. This solution works even in the old jQuery (v1.4)!

Solution 28 - Javascript

If someone comes here looking for a way to add options with data properties

Using attr

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

Using data - version added 1.2.3

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

Solution 29 - Javascript

Try

mySelect.innerHTML+= '<option value=1>My option</option>';

btn.onclick= _=> mySelect.innerHTML+= `<option selected>${+new Date}</option>`

<button id="btn">Add option</button>

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

Solution 30 - Javascript

U can try below code to append to option

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

Solution 31 - Javascript

> Just by single line

   $.each(result, function (k,v) {
                         **if(k == selectedMonthNumber) var selectedMonth = 'selected'; else var selectedMonth = '';**
                             $("#periodMonth").append($('<option>', {
                                 value: k,
                                 text: v,
                                 **selected: selectedMonth**
                         }));
                    })

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAliView Question on Stackoverflow
Solution 1 - JavascriptduleView Answer on Stackoverflow
Solution 2 - JavascriptJoshView Answer on Stackoverflow
Solution 3 - JavascriptDipuView Answer on Stackoverflow
Solution 4 - JavascriptbobinceView Answer on Stackoverflow
Solution 5 - JavascriptAbrar JahinView Answer on Stackoverflow
Solution 6 - Javascriptuser8901272View Answer on Stackoverflow
Solution 7 - JavascriptRuss CamView Answer on Stackoverflow
Solution 8 - JavascriptAshishView Answer on Stackoverflow
Solution 9 - JavascriptJohn MagnoliaView Answer on Stackoverflow
Solution 10 - JavascriptJoão Pimentel FerreiraView Answer on Stackoverflow
Solution 11 - JavascriptszpapasView Answer on Stackoverflow
Solution 12 - JavascriptcaiohamamuraView Answer on Stackoverflow
Solution 13 - JavascriptMaxEchoView Answer on Stackoverflow
Solution 14 - JavascriptGauri BhosleView Answer on Stackoverflow
Solution 15 - JavascriptEduard FlorinescuView Answer on Stackoverflow
Solution 16 - JavascriptATOzTOAView Answer on Stackoverflow
Solution 17 - JavascriptDulacosteView Answer on Stackoverflow
Solution 18 - JavascriptAhmedView Answer on Stackoverflow
Solution 19 - JavascriptMcfaithView Answer on Stackoverflow
Solution 20 - Javascriptd-velopView Answer on Stackoverflow
Solution 21 - JavascriptPeang PeangView Answer on Stackoverflow
Solution 22 - JavascriptCrisView Answer on Stackoverflow
Solution 23 - JavascriptHatimView Answer on Stackoverflow
Solution 24 - JavascriptRonald Valera SantanaView Answer on Stackoverflow
Solution 25 - JavascriptpanzerView Answer on Stackoverflow
Solution 26 - JavascriptidigloveView Answer on Stackoverflow
Solution 27 - JavascriptCPHPythonView Answer on Stackoverflow
Solution 28 - JavascriptmasmerinoView Answer on Stackoverflow
Solution 29 - JavascriptKamil KiełczewskiView Answer on Stackoverflow
Solution 30 - JavascriptMuhammad KamalView Answer on Stackoverflow
Solution 31 - JavascriptKaushik shrimaliView Answer on Stackoverflow