93

I have an array declared in a script:

var myArray = new Array("1", "2", "3", "4", "5" . . . . . "N");

I have a form which contains a drop down menu:

<form id="myForm">
  <select id="selectNumber">
    <option>Choose a number</option>
  </select>
</form>

Using Javascript, how will I populate the rest of the drop down menu with the array values? So that the options will be "Choose a number", "1", "2", "3", "4", "5" . . . . . "N"?

user1296265
  • 959
  • 2
  • 8
  • 6

14 Answers14

141

You'll need to loop through your array elements, create a new DOM node for each and append it to your object:

var select = document.getElementById("selectNumber");
var options = ["1", "2", "3", "4", "5"];

for(var i = 0; i < options.length; i++) {
    var opt = options[i];
    var el = document.createElement("option");
    el.textContent = opt;
    el.value = opt;
    select.appendChild(el);
}
<select id="selectNumber">
    <option>Choose a number</option>
</select>
Tomerikoo
  • 18,379
  • 16
  • 47
  • 61
Alex Turpin
  • 46,743
  • 23
  • 113
  • 145
  • I've got an error `textContent & value are not a function` and the solution was to **cast** opt to String like that: `el.textContent = String(opt); el.value = String(opt);` that's in case of **opt** isn't _**String**_. – Abdallah Okasha Jan 08 '18 at 10:30
  • @AbdallahOkasha That doesn't make sense. That error would happen if you tried to use `el.textContent` like this: `el.textContent(opt)`. If you use it like in my exmaple, it doesn't matter if it's a `number` the browsers will turn it into a string. – Alex Turpin Jan 08 '18 at 16:29
  • Thanks for caring .. actually, I've tried to write `el.textContent = arr[i]` or `el.value = arr[i]` and i have got an error said: **_value_, _text_ and _textContent_ are not functions**. – Abdallah Okasha Jan 09 '18 at 10:27
  • @AbdallahOkasha can you reproduce a minimal example of this error on something like http://jsfiddle.net/ and share a link? – Alex Turpin Jan 09 '18 at 21:12
  • This's jsfiddle snippet @alex in this example .text function works well without parsing to string, however in my code it gives me an error i am actually using similar array of string (each contains white spaces). https://jsfiddle.net/okasha/h1jt3yz1/2/ – Abdallah Okasha Jan 15 '18 at 09:32
  • @AbdallahOkasha You are using `text` and not `textContent` in those examples. And both examples seem to work without giving an error. – Alex Turpin Jan 16 '18 at 16:30
68

You can also do it with jQuery:

var options = ["1", "2", "3", "4", "5"];
$('#select').empty();
$.each(options, function(i, p) {
    $('#select').append($('<option></option>').val(p).html(p));
});
Jaco B
  • 994
  • 7
  • 16
18

I used Alex Turpin's solution with small corrections as mentioned below:

var select = document.getElementById("selectNumber"); 
var options = ["1", "2", "3", "4", "5"]; 

for(var i = 0; i < options.length; i++) {
    var opt = options[i];

    var el = document.createElement("option");
    el.text = opt;
    el.value = opt;

    select.add(el);
}​

Corrections because with the appendChild() function it loads when the DOM prepares. So It's not working in old (8 or lesser) IE versions. So with the corrections it's working fine.

Some notes on the differences between add() and appendChild().

Tomerikoo
  • 18,379
  • 16
  • 47
  • 61
0190198
  • 1,667
  • 16
  • 23
13

I found this also works...

var select = document.getElementById("selectNumber"); 
var options = ["1", "2", "3", "4", "5"]; 

// Optional: Clear all existing options first:
select.innerHTML = "";
// Populate list with options:
for(var i = 0; i < options.length; i++) {
    var opt = options[i];
    select.innerHTML += "<option value=\"" + opt + "\">" + opt + "</option>";
}
Tim D
  • 650
  • 1
  • 12
  • 18
13

You'll first get the dropdown element from the DOM, then loop through the array, and add each element as a new option in the dropdown like this:

var myArray = new Array("1", "2", "3", "4", "5");


// Get dropdown element from DOM
var dropdown = document.getElementById("selectNumber");

// Loop through the array
for (var i = 0; i < myArray.length; ++i) {
    // Append the element to the end of Array list
    dropdown[dropdown.length] = new Option(myArray[i], myArray[i]);
}
<form id="myForm">
  <select id="selectNumber">
    <option>Choose a number</option>
  </select>
</form>

This assumes that you're not using JQuery, and you only have the basic DOM API to work with.

Tomerikoo
  • 18,379
  • 16
  • 47
  • 61
DashK
  • 2,640
  • 1
  • 22
  • 28
8

Something like this should work:

var dropdown = document.getElementById("dropdown1");
if (dropdown) {
    for (var i=0; i < month.length;++i){    
        addOption(dropdown, month[i], month[i]);
    }
}

addOption = function(selectbox, text, value) {
    var optn = document.createElement("OPTION");
    optn.text = text;
    optn.value = value;
    selectbox.options.add(optn);  
}

You can refer to this article for more details:
http://www.plus2net.com/javascript_tutorial/list-adding.php

James Johnson
  • 45,496
  • 8
  • 73
  • 110
8
["1","2","3","4"].forEach( function(item) { 
   const optionObj = document.createElement("option");
   optionObj.textContent = item;
   document.getElementById("myselect").appendChild(optionObj);
});
Peter Aron Zentai
  • 11,482
  • 5
  • 41
  • 71
4

Here is my answer:

var options = ["1", "2", "3", "4", "5"];
for(m = 0 ; m <= options.length-1; m++){
   var opt= document.createElement("OPTION");
   opt.text = options[m];
   opt.value = (m+1);
   if(options[m] == "5"){
    opt.selected = true;}
document.getElementById("selectNum").options.add(opt);}
4

Using template literals would be:

const arr = [1,2,3,4]
var options = arr.map(e=>{return `<option value="${e}">${e}</option>`})
document.getElementById("selectNumber").innerHTML = options.join('')
//document.getElementById("selectNumber").insertAdjacentHTML("beforeend", options);
<form id="myForm">
  <select id="selectNumber">
    <option>Choose a number</option>
  </select>
</form>
jleviaguirre
  • 686
  • 6
  • 10
  • Beautiful, compact and simple solution. – jgarcias Oct 21 '22 at 01:13
  • Or even `document.getElementById("selectNumber = arr.map(val => \`\`);` - I would reserve the variable `e` for event – mplungjan Nov 22 '22 at 06:50
  • Even better! – jleviaguirre Nov 23 '22 at 21:24
  • 2
    This results in commas in between all the option elements because you're implicitly converting the array to a string. It doesn't seem to show the commas to the end user, but still, I would replace the `= options` in this answer with `= options.join('')` – hostingutilities.com Aug 08 '23 at 19:17
  • @mplungian: another alternative for the last statement is to insert the array to the select like this: document.getElementById("selectNumber").insertAdjacentHTML("beforeend", options); – jleviaguirre Aug 24 '23 at 15:41
3

If you're working with React and JSX, you can use the map function. Then you don't need to add DOM nodes manually.

const numsarray = [1, 2, 3, 4, 5];

You can map this into your <options> tag (within <select>)

<select>
  {numsarray.map((num) => (
    <option>{numsarray}</option>
  ))}
</select>
vaba-huo
  • 51
  • 1
  • 4
3
var test = document.getElementById("TestOption");
var arr = ["A","B","C","D"];  
//remove options if necessary
for(var i=test.options.length- 1;i>= 0;i--) {test.remove(i);}        
//add new options
for(i in arr) {test.add(new Option(arr[i],i));}
1

var list =["muez","devomech","solution"]
var option = "";
          for(var i=0; i<list.length; i++){
            option+= '<option value="'+ list[i] +'">' + list[i] + "</option>"
          
        }
        document.getElementById("deviceoption").innerHTML = option;
<select id="deviceoption"></select>

`

0
<form id="myForm">
<select id="selectNumber">
    <option>Choose a number</option>
    <script>
        var myArray = new Array("1", "2", "3", "4", "5" . . . . . "N");
        for(i=0; i<myArray.length; i++) {  
            document.write('<option value="' + myArray[i] +'">' + myArray[i] + '</option>');
        }
    </script>
</select>
</form>
0

Simple jQuery solution that is easy to debug:

<form id="myForm">
  <select id="selectNumber">
    <option>Choose a number</option>
  </select>
</form>

<script>
  var myArray = ["1", "2", "3", "4", "5"];
  for (let i = 0; i < myArray.length; i++) {
    $("#selectNumber").append("<option value='" + myArray[i] + "'>" + myArray[i] + "</option>");
  }
</script>
Zaffer
  • 1,290
  • 13
  • 32