However, the technique to generate the option list via javascript is highly browser dependent!
According to the specs - this should be pretty simple .. and it is for everything EXCEPT IE8!
innerHTML | IE8 method |
---|---|
In the main form
This is the associated html - pretty standard.
<select name="UIComboBox" id="UIComboBox" > <option value="Algorithms">Algorithms</option> </select> |
window.onload = function() { var UIComboBox = document.getElementById('UIComboBox'); // *var* required in IE8 Configure_ComboBox(UIComboBox); } |
Expected results
Configure_ComboBox = function(ComboBox) { // This is typical data var xx = "<option value=Red>Red</option> <option value=Green>Green</option>"; ComboBox.innerHTML = xx; // Works in Chrome, fails in IE8 var yy = ComboBox.innerHTML ; // just for test } |
In IE8, the component contains no data!!!
IE8 is broken
var xx = "<option value=Red>Red</option> <option value=Green>Green</option>"; ComboBox.innerHTML = xx; var yy = ComboBox.innerHTML ; |
Red</option> <option value=Green>Green</option> |
However, no matter what I did, I could not get the component to display the options.
These are some of the combinations I tried.
ComboBox.innerHTML = "test"; var yy = ComboBox.innerHTML ; // yy contained "test" |
var xx = "<option value=Red>Red</option> <option value=Green>Green</option>"; var ss = ComboBox.innerHTML = xx; // ss was the same as xx var yy = ComboBox.innerHTML ; // yy was missing the first option tag |
var xx = "x<option value=Red>Red</option> <option value=Green>Green</option>"; var ss = ComboBox.innerHTML = xx; // ss was the same as xx var yy = ComboBox.innerHTML ; // yy was the same as xx, but the options did not display |
var xx = "<option value=2><option value=Red>Red</option> <option value=Green>Green</option>"; var ss = ComboBox.innerHTML = xx; // ss was the same as xx var yy = ComboBox.innerHTML ; // yy was missing the first 2 option tags |
You can check this nonsense yourself
This is what works
Configure_ComboBox_IE8 = function(ComboBox) { var xx = ['Red','Green']; // This is just an array ComboBox.innerHTML = "" ; // erase the dummy contents var option ; for (var i = 0; i < xx.length; i++) { option = document.createElement("option"); option.text = xx[i]; option.value = xx[i]; ComboBox.add(option, i); } } |
Controlling the *values*
Component | ComboBox.value |
---|---|
function mcExample_setClassOptions(ComboBox) { var optionsClass = [ // This is an array of classes {text:'Red', index:1}, {text:'Green', index:2} ]; ComboBox.innerHTML = ""; // clear the current (dummy) contents var option ; for (var i = 0; i < optionsClass.length; i++) { option = document.createElement("option"); option.text = optionsClass[i].text; option.value = optionsClass[i].index; ComboBox.add(option, i); } } function UIComboBox2_Changed(){ ComboBox2_Result.value = UIComboBox2.value; } var UIComboBox2; var ComboBox2_Result; window.onload = function() { UIComboBox2 = document.getElementById('UIComboBox2'); ComboBox2_Result = document.getElementById('ComboBox2_Result'); mcExample_setClassOptions(UIComboBox2); UIComboBox2_Changed(); } |