I have a dropdown, when I select an option it creates a dynamic dropdown. So far, so good.
But I want to create another dynamic dropdown, now based on the values of the other dynamic dropdown. How can I do it?
The first dynamic dropdown works, I guess the 2nd one does not work because the dynamic variable "div" does not have a static ID. Can someone help me solving my problem?
Here is the code:
<form name="Inv">
<table>
<tr><td colspan="4" align="center" bgcolor="#FF8000"><h2>Inventory Request</h2></td></tr>
<tr><td colspan="4" bgcolor="#D8D8D8" style="height: 20;"></td></tr>
<tr>
<td align="center" bgcolor="#D8D8D8"><b>Name (type)</b></td>
<td align="center" bgcolor="#D8D8D8"><b>Subtype</b></td>
<td align="center" bgcolor="#D8D8D8"><b>Description</b></td>
<td align="center" bgcolor="#FFFF00"><b>Quantity</b></td>
</tr>
<tr>
<td bgcolor="#D8D8D8">
<select id="mainMenu" onchange="displayMenus()" size="1">
<option value="0" id="0">Seleccione un equipo</option>
<option value="modules" id="mod">Modules</option>
<option value="microinverters" id="mi">MicroInverters</option>
Many more options...
</select></td>
<td bgcolor="#D8D8D8"><div id="myDiv" onchange="displayMenus2()" size="1"></div>
</td>
<td bgcolor="#D8D8D8"><div id="myDiv2"></div>
</td>
<td><input type="number" id="quantity"/>
</td>
</tr>
</table>
</form>
JavaScript:
<script type="text/javascript">
var created = 0;
function displayMenus() {
if (created == 1) {
removeDrop();
}
//Call mainMenu the main dropdown menu
var mainMenu = document.getElementById('mainMenu');
//Create the new dropdown menu
var whereToPut = document.getElementById('myDiv');
var newDropdown = document.createElement('select');
newDropdown.setAttribute('id',"newDropdownMenu");
whereToPut.appendChild(newDropdown);
if (mainMenu.value == "modules") {
//add option
var optionBovietM=document.createElement("option");
optionBovietM.text="BovietModule";
optionBovietM.value="BovietModule";
newDropdown.add(optionBovietM,newDropdown.options[null]);
//add option
var optionHanwhaM=document.createElement("option");
optionHanwhaM.text="HanwhaQCellModule";
newDropdown.add(optionHanwhaM,newDropdown.options[null]);
} else if (mainMenu.value == "microinverters") {
var optionEnphaseMI=document.createElement("option");
optionEnphaseMI.text="EnphaseMicroInverters";
newDropdown.add(optionEnphaseMI,newDropdown.options[null]);
} else if (mainMenu.value == "enphase") {
After all the options...
}
created = 1
}
function removeDrop() {
var d = document.getElementById('myDiv');
var oldmenu = document.getElementById('newDropdownMenu');
d.removeChild(oldmenu);
}
</script>
Don't set
onchange="displayMenus2()"
in the HTML, as you noticed: it doesn't work. This is not because of the id but because it's set on adiv
anddiv
s don't haveonchange
events.Instead, you should set it in the JavaScript when you create your new drop-down.
update
okay, it seems you want more :) allow me to rewrite your code completely. Most importantly I put all your select options into JavaScript. It makes more sense like this and is more easily manageable.
Now doing something like this, you could build a recursive loop and all, but as I don't really know much about your data I wrote this simple approach. I hope you understand it. Be sure to leave any questions.