57

I am trying to populate a dropdown select with an array using jQuery.

Here is my code:

 // Add the list of numbers to the drop down here
 var numbers[] = { 1, 2, 3, 4, 5};
 $.each(numbers, function(val, text) {
 $('#items').append(
 $('<option></option>').val(val).html(text)
 ); 
 // END

But I'm getting an error. The each function is something I am got off this website.

Is it bombing out because I'm using a one-dimensional array? I want both the option and the text to be the same.

Machavity
31.8k27 gold badges97 silver badges108 bronze badges
asked Aug 10, 2010 at 4:38
1
  • Appending items one at a time on the DOM is considered to be very slow and is highly not advised. Way more performatic is to build a string and append it after the loop Commented Aug 10, 2010 at 4:58

7 Answers 7

106

Try for loops:

var numbers = [1, 2, 3, 4, 5];
for (var i=0;i<numbers.length;i++){
 $('<option/>').val(numbers[i]).html(numbers[i]).appendTo('#items');
}

Much better approach:

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);
fbarikzehy
5,5252 gold badges38 silver badges41 bronze badges
answered Aug 10, 2010 at 4:41
Sign up to request clarification or add additional context in comments.

1 Comment

If the array you are dealing with are not numbers or not from a safe source you should use the 1st technique listed except using .text(number[i]) instead of .html(number[i]). This will ensure you don't risk any injection exploits.
44

The array declaration has incorrect syntax. Try the following, instead:

var numbers = [ 1, 2, 3, 4, 5]

The loop part seems right

$.each(numbers, function(val, text) {
 $('#items').append( $('<option></option>').val(val).html(text) )
 }); // there was also a ) missing here

As @Reigel did seems to add a bit more performance (it is not noticeable on such small arrays)

Dave Jarvis
31.3k43 gold badges186 silver badges327 bronze badges
answered Aug 10, 2010 at 4:55

1 Comment

This is the best option if you have predefined keys
8

You can also do this:

var list = $('#items')[0]; // HTMLSelectElement
$.each(numbers, function(index, text) { 
 list.options[list.options.length] = new Option(index, text);
}); 
answered Apr 17, 2012 at 5:34

Comments

4
var qty = 5;
var option = '';
for (var i=1;i <= qty;i++){
 option += '<option value="'+ i + '">' + i + '</option>';
}
$('#items').append(option);
answered May 17, 2015 at 17:06

Comments

4

A solution is to create your own jquery plugin that take the json map and populate the select with it.

(function($) { 
 $.fn.fillValues = function(options) {
 var settings = $.extend({
 datas : null, 
 complete : null,
 }, options);
 this.each( function(){
 var datas = settings.datas;
 if(datas !=null) {
 $(this).empty();
 for(var key in datas){
 $(this).append('<option value="'+key+'"+>'+datas[key]+'</option>');
 }
 }
 if($.isFunction(settings.complete)){
 settings.complete.call(this);
 }
 });
 }
}(jQuery));

You can call it by doing this :

$("#select").fillValues({datas:your_map,});

The advantages is that anywhere you will face the same problem you just call

 $("....").fillValues({datas:your_map,});

Et voila !

You can add functions in your plugin as you like

answered Jul 29, 2015 at 12:17

Comments

1

Since I cannot add this as a comment, I will leave it here for anyone who finds backticks to be easier to read. Its basically @Reigel answer but with backticks

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);
answered Jun 7, 2020 at 8:56

Comments

0

The solution I used was to create a javascript function that uses jquery:

This will populate a dropdown object on the HTML page. Please let me know where this can be optimized - but works fine as is.

function util_PopulateDropDownListAndSelect(sourceListObject, sourceListTextFieldName, targetDropDownName, valueToSelect)
{
 var options = '';
 // Create the list of HTML Options
 for (i = 0; i < sourceListObject.List.length; i++)
 {
 options += "<option value='" + sourceListObject.List[i][sourceListTextFieldName] + "'>" + sourceListObject.List[i][sourceListTextFieldName] + "</option>\r\n";
 }
 // Assign the options to the HTML Select container
 $('select#' + targetDropDownName)[0].innerHTML = options;
 // Set the option to be Selected
 $('#' + targetDropDownName).val(valueToSelect);
 // Refresh the HTML Select so it displays the Selected option
 $('#' + targetDropDownName).selectmenu('refresh')
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
HaveNoDisplayName
8,537106 gold badges41 silver badges50 bronze badges
answered May 11, 2015 at 19:30

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.