L'idée centrale de la solution est la suivante :
- créer un nouveau
input
élément
- Ajouter le type
text
- ajouter l'élément au DOM
Cela peut être fait via ce simple script :
var input = document.createElement('input');
input.setAttribute('type', 'text');
document.getElementById('parent').appendChild(input);
La question est maintenant de savoir comment rendre ce processus dynamique. Comme indiqué dans la question, il existe une autre entrée dans laquelle l'utilisateur insère le nombre d'entrées à générer. Cela peut se faire de la manière suivante :
function renderInputs(el){
var n = el.value && parseInt(el.value, 10);
if(isNaN(n)){
return;
}
var input;
var parent = document.getElementById("parent");
cleanDiv(parent);
for(var i=0; i<n; i++){
input = document.createElement('input');
input.setAttribute('type', 'text');
parent.appendChild(input);
}
}
function cleanDiv(div){
div.innerHTML = '';
}
Insert number of input to generate: </br>
<input type="text" onchange="renderInputs(this)"/>
<div id="parent">
Generated inputs:
</div>
mais en général, l'ajout d'une simple entrée n'est pas vraiment utile, il serait préférable d'ajouter un nom à l'entrée, de sorte qu'elle puisse être facilement envoyée en tant que formulaire. Ce snippet ajoute également un nom :
function renderInputs(el){
var n = el.value;
var input, label;
var parent = document.getElementById("parent");
cleanDiv(parent);
el.value.split(',').forEach(function(name){
input = document.createElement('input');
input.setAttribute('type', 'text');
input.setAttribute('name', name);
label = document.createElement('label');
label.setAttribute('for', name);
label.innerText = name;
parent.appendChild(label);
parent.appendChild(input);
parent.appendChild(document.createElement('br'));
});
}
function cleanDiv(div){
div.innerHTML = '';
}
Insert the names, separated by comma, of the inputs to generate: </br>
<input type="text" onchange="renderInputs(this)"/>
<br>
Generated inputs: </br>
<div id="parent">
</div>