Die Kernidee der Lösung lautet:
- Erstellen Sie ein neues
input
Element
- Fügen Sie den Typ hinzu
text
- Hängen Sie das Element an das DOM an
Dies kann über dieses einfache Skript erfolgen:
var input = document.createElement('input');
input.setAttribute('type', 'text');
document.getElementById('parent').appendChild(input);
Die Frage ist nun, wie dieser Prozess dynamisch gestaltet werden kann. Wie in der Frage angegeben, gibt es eine andere Eingabe, bei der der Benutzer die Anzahl der zu generierenden Eingaben eingibt. Dies kann wie folgt erfolgen:
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>
Normalerweise ist das Hinzufügen nur einer Eingabe nicht wirklich nützlich. Es ist jedoch besser, der Eingabe einen Namen hinzuzufügen, damit sie problemlos als Formular gesendet werden kann. Dieses Snippet fügt auch einen Namen hinzu:
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>