Reputation: 5742
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));
Upvotes: 58
Views: 92489
Reputation: 2108
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>
Upvotes: 2
Reputation: 441
I usually do it like this:
document.getElementById("selectid").innerHTML="<option value='foo'>FOO</option>"
;
Upvotes: 0
Reputation: 5514
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.
Upvotes: 1
Reputation: 10351
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>
Upvotes: 7
Reputation: 35
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>
Upvotes: 3
Reputation: 3381
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
Upvotes: 49
Reputation: 133
you can set id for the select id=inptProduct Then do $('#inptProduct').val(yourselectValue)
Upvotes: -5
Reputation: 63562
var $inputProduct = $("select[name='inputProduct']")
$(productArray).each(function(i, v){
$inputProduct.append($("<option>", { value: v, html: v }));
});
Upvotes: 27