58

How can I dynamically set the options from my html select field with Javascript? This is my page setup:

<form name="test">
  <table>
    <tr>
      <td class='dataleft'>Product: </td>
      <td><select name='inptProduct'></select></td>
    </tr>
  </table>
</form>

I have all values in an array. This is the location to set the <option>s.

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

PS: jQuery can be used.


Solution: This is the final solution I was looking for. It does not apply the new options to the select field. It removes all first, and then adds the new ones:

var optionsAsString = "";
for(var i = 0; i < productArray.length; i++) {
    optionsAsString += "<option value='" + productArray[i] + "'>" + productArray[i] + "</option>";
}
$("select[name='inptProduct']").find('option').remove().end().append($(optionsAsString));
2

8 Answers 8

49

wellyou have almost done it all:

var optionsAsString = "";
for(var i = 0; i < productArray.length; i++) {
    optionsAsString += "<option value='" + productArray[i] + "'>" + productArray[i] + "</option>";
}
$( 'select[name="inptProduct"]' ).append( optionsAsString );

EDIT removed $ wrapper around last optionsAsString as append automatically converts strings

Sign up to request clarification or add additional context in comments.

2 Comments

@vemv again - maybe its time to create a function that do this
best answer, simple & easy.
27
var $inputProduct = $("select[name='inputProduct']")

$(productArray).each(function(i, v){ 
    $inputProduct.append($("<option>", { value: v, html: v }));
});

5 Comments

this will work - but adding the options in one go is more efficient. Not that it matters if it's just one pulldown in a page.
what makes you think this doesn't do that?
you are running .append for every member of the productArray
Thanks for this hunter. Is there a function to replace all options, instead of appending them?
write $inputProduct.html("") before looping through to clear current options
7

Assuming that the array productArray is a simple array, with each element being the value of the option, and the desired title for that option.

$( 'select[name="inptProduct"]' )
  .html( '<option>' + productArray.join( '</option><option>' ) + '</option>' );

Example:

productArray = ['One', 'Two', 'Three'];

// With the original code being

<select name="inptProduct">
  <option>There could be no options here</option>
  <option>Otherwise, any options here will be overwritten</option>
</select>

// Running the code above would output

<select name="inptProduct">
  <option>One</option>
  <option>Two</option>
  <option>Three</option>
</select>

Comments

3
function onLoad() {

  var type = new Array("Saab","Volvo","BMW");

    var $select = $("select[name='XXXXXType']")
    alert($select);
    $(type).each(function(i, v){
        $select.append($("<option>", { value: v, html: v }));
      });

}
<select name="XXXXXType" id="XXXXXType"></select>

Comments

2

Here is a solution for people who don't want to use jQuery:

const select = document.getElementById('select')

const arr = ['Apple', 'Pear', 'Orange']

arr.forEach(value => {
  const option = document.createElement('option')
  option.innerHTML = value
  select.appendChild(option)
})
<select id="select"></select>

Comments

1

If you not insisting for pure JavaScript to do the job, you can easily done the job using jQuery.

<form name="test">
  <table>
    <tr>
      <td class='dataleft'>Product: </td>
      <td><select id='inptProduct'></select></td>
    </tr>
  </table>
</form>


for (var i = 0; i < productArray.length; i++) {
    $("#inptProduct").append('<option value=' + if_you_want_set_value + '>' + productArray[i] + '</option>');
    }

Note that here I used the id of select tag. That's why I add the html part too. Hope you know how to add jQuery.

Comments

0

I usually do it like this:

document.getElementById("selectid").innerHTML="<option value='foo'>FOO</option>";

Comments

-5

you can set id for the select id=inptProduct Then do $('#inptProduct').val(yourselectValue)

2 Comments

First of all you don't need to set the id to access a node, secondly val does something completely different.
.val() will set the selected value of the select element.

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.