51

Does anyone know of a technique to programmatically create an HTML select list including options using JQuery?

8 Answers 8

136
var arr = [
  {val : 1, text: 'One'},
  {val : 2, text: 'Two'},
  {val : 3, text: 'Three'}
];

var sel = $('<select>').appendTo('body');
$(arr).each(function() {
 sel.append($("<option>").attr('value',this.val).text(this.text));
});
Sign up to request clarification or add additional context in comments.

Comments

13
var s = $('<select/>');
var o = [1, 2, 3];
for (var i in o) {
    s.append($('<option/>').html(o[i]));
}
$('body').append(s);

Comments

9

I know this is old, but what the hey:

$selectBox.html($.map(myArray, function(){
    return $('<option/>', {text: this});
}));

1 Comment

Great method for the functional programming paradigm, which we all need to shift to!
5

This is very straight forward to do:

var selectList = "<select name='numbers'>";
for (var x = 0; x < 10; x++) {
    selectList += "<option>" + x + "</option>";
}
selectList += "</select>";
$('#my-container').html(selectList);

Comments

2

I think it's simpler.IMHO.

 arr.map(x => ($("YOUR SELECTOR").append(`<option value="${x}">${x}</option>`)));

Comments

1

Here's a variation - based on previous answers in this thread - where all but the select-input options can be specified via an input JSON object:

Would be interesting to see if the options array can somehow be specified in that JSON input?

    var fruitListProfile = {
        id : someKey,
        class : 'fruit_list',
        style : 'margin-right: 20px; '
    };

    var selectInput = $('<select/>', fruitListProfile);

    var fruitOptions = ['apple', 'cherry', 'kiwi'];
    for (var i in fruitOptions) {
        selectInput.append($('<option/>').html(fruitOptions[i]));
    }

Comments

0

Here is another version of an answer to the question using ajax to fetch a json response used to create the select list with key value pairs

        $.ajax({
        type: 'post',
        url: 'include/parser.php',
        data: {                     
            mode: 'getSubtypes',
            type: type
        },
        success: function (response) {
            var mySubtype = document.getElementById("Component");
            var components = $.parseJSON(response);

            var selectList = document.createElement("select");
            selectList.id = "subtype";
            selectList.name = "subtype";
            mySubtype.appendChild(selectList);
            $('#subtype').append('<option value="">Select ...</option>');
            $.each(components, function(k, v) {
                var option = new Option(v, k); 
                $('#subtype').append($(option));               
            });
        }
    });        

Comments

0

If you have already <select> list somewhere in DOM, reuse it and make it empty from previous user interactions...

// Call existing list, chain empty()
var my_list = $("#my_list").empty();
                    
// Build list
$(my_arr).each(function() {
    my_list.append($("<option/>").attr(\'value\',this.item_id).text(this.item_name));
});

Comments

Your Answer

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.