I have the following array called equipos_seleccionados
["12 - v4", "100 - v500"]
This is how the frontend looks:
As you can see, i automatically generate as many textbox as the value on inputs on the head section.
GOAL: I would like to use (on this case) the value 12 – v4 to the first 2 elements (Selects) and the value 100 – v500 for the next 4 elements (Selects).
This is the code i have so far:
result["cantidad_seriado"].forEach(function(entry) { for (var i = 0; i < entry; i++) { div_hr1.append("<select class='form-control' id='selected_equipo_seriado' name='selected_equipo_seriado' required='required' disabled><option selected value=''>" + equipos_seleccionados + "</option></select><br>"); div_hr2.append(` <input class="form-control" id="nro_serie_seriado" name="nro_serie_seriado" type="number" required="required" placeholder="Nro de serie"><br> `); }; div_hr1.append(` <hr class="sidebar-divider" style="border-color:blue;"> `); div_hr2.append(` <hr class="sidebar-divider" style="border-color:blue;"> `); });**
This is how it should looks:
Advertisement
Answer
You can print just the element in equipos_seleccionados that is in the same position as result[“cantidad_seriado”] via the overload that uses the index of the forEach function.
You just need to change the .forEach(function(entry))
for .forEach(function(entry, index))
var equipos_seleccionados = ["12 - v4", "100 - v500"] div_hr1 = document.getElementById('div_hr1') div_hr2 = document.getElementById('div_hr2') var result = ["2", "3"] result.forEach(function(entry, index) { console.log(entry) for (var i = 0; i < entry; i++) { div_hr1.innerHTML += "<select class='form-control' id='selected_equipo_seriado' name='selected_equipo_seriado' required='required' disabled><option selected value=''>" + equipos_seleccionados[index] + "</option></select><br>" div_hr2.innerHTML += ` <input class="form-control" id="nro_serie_seriado" name="nro_serie_seriado" type="number" required="required" placeholder="Nro de serie"><br> ` } div_hr1.innerHTML += ` <hr class="sidebar-divider" style="border-color:blue;"> ` div_hr2.innerHTML += ` <hr class="sidebar-divider" style="border-color:blue;"> ` });
<div id="div_hr1" style="width=50%; display:inline-block;"></div> <div id="div_hr2" style="width=50%; display:inline-block;"></div>
This works when both of your arrays come in the same order, in this case “2” is for “12 – v4” and “3” for “100 – v500”. If you don’t want to depend on the order of the items in both arrays you can use a dictionary based structure instead of that array, so you can have something like this:
var quantityPerEquipment = { "12 - v4": 2, "100 - v500": 3 } var equipos_seleccionados = ["12 - v4", "100 - v500"] div_hr1 = document.getElementById('div_hr1') div_hr2 = document.getElementById('div_hr2') Object.keys(quantityPerEquipment).forEach(function(entry) { console.log(entry) for (var i = 0; i < quantityPerEquipment[entry]; i++) { div_hr1.innerHTML += "<select class='form-control' id='selected_equipo_seriado' name='selected_equipo_seriado' required='required' disabled><option selected value=''>" + entry + "</option></select><br>" div_hr2.innerHTML += ` <input class="form-control" id="nro_serie_seriado" name="nro_serie_seriado" type="number" required="required" placeholder="Nro de serie"><br> ` } div_hr1.innerHTML += ` <hr class="sidebar-divider" style="border-color:blue;"> ` div_hr2.innerHTML += ` <hr class="sidebar-divider" style="border-color:blue;"> ` });
<div id="div_hr1" style="width=50%; display:inline-block;"></div> <div id="div_hr2" style="width=50%; display:inline-block;"></div>
That will ensure that your elements always match.