我想在我的Web表单中动态创建输入类型的文本。更具体地说,我有一个文本字段,用户可以在其中输入所需的文本字段的数量。我希望文本字段以相同的形式动态生成。
我怎么做?
我想在我的Web表单中动态创建输入类型的文本。更具体地说,我有一个文本字段,用户可以在其中输入所需的文本字段的数量。我希望文本字段以相同的形式动态生成。
我怎么做?
Answers:
使用JavaScript:
var input = document.createElement("input");
input.type = "text";
input.className = "css-class-name"; // set the CSS class
container.appendChild(input); // put it into the DOM
从用户那里获取文本字段的数量,并将其分配给变量。
var no = document.getElementById("idname").value
要创建输入字段,请使用createElement
method并指定元素名称(即“ input”)作为如下所示的参数并将其分配给变量。
var textfield = document.createElement("input");
然后为变量分配必要的属性。
textfield.type = "text";
textfield.value = "";
最后,使用appendChild
method将变量追加到form元素。这样,输入元素将在form元素本身中创建。
document.getElementById('form').appendChild(textfield);
循环执行2、3和4步骤,以在表单元素内创建所需数量的用户指定的输入元素。
for(var i=0;i<no;i++) {
var textfield = document.createElement("input");
textfield.type = "text"; textfield.value = "";
document.getElementById('form').appendChild(textfield);
}
这是完整的代码
function fun() {
/*Getting the number of text fields*/
var no = document.getElementById("idname").value;
/*Generating text fields dynamically in the same form itself*/
for(var i=0;i<no;i++) {
var textfield = document.createElement("input");
textfield.type = "text";
textfield.value = "";
document.getElementById('form').appendChild(textfield);
}
}
<form id="form">
<input type="type" id="idname" oninput="fun()" value="">
</form>
您可以根据输入的文本字段的数量在循环中执行类似的操作。
$('<input/>').attr({type:'text',name:'text'+i}).appendTo('#myform');
但是为了获得更好的性能,我会先创建所有html并将其仅注入DOM一次。
var count = 20;
var html = [];
while(count--) {
html.push("<input type='text' name='name", count, "'>");
}
$('#myform').append(html.join(''));
编辑此示例使用jQuery附加html,但是您也可以轻松修改它以使用innerHTML。
我认为以下链接将为您提供帮助。如果要动态生成字段,并且还希望同时删除它们,则可以从此处获取帮助。我有同样的问题,所以我得到了答案
$(function() {
var scntDiv = $('#p_scents');
var i = $('#p_scents p').size() + 1;
$('#addScnt').live('click', function() {
$('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
i++;
return false;
});
$('#remScnt').live('click', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
i--;
如果将其放入由PHP处理的表单中,则还必须分别处理原始输入字段和其他输入字段。
您可以使用ES6退出
var inputs = [
`<input type='checkbox' id='chbox0' onclick='checkboxChecked(this);'> <input type='text' class='noteinputs0'id='note` + 0 + `' placeholder='task0'><button id='notebtn0' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 1 + `' placeholder='task1'><button class='notebuttons' id='notebtn1' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 2 + `' placeholder='task2'><button class='notebuttons' id='notebtn2' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 3 + `' placeholder='task3'><button class='notebuttons' id='notebtn3' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 4 + `' placeholder='task4'><button class='notebuttons' id='notebtn4' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 5 + `' placeholder='task5'><button class='notebuttons' id='notebtn5' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 6 + `' placeholder='task6'><button class='notebuttons' id='notebtn6' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 7 + `' placeholder='task7'><button class='notebuttons' id='notebtn7' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 8 + `' placeholder='task8'><button class='notebuttons' id='notebtn8' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 9 + `' placeholder='task9'><button class='notebuttons' id='notebtn9' >creat</button>`
].sort().join(" ");
document.querySelector('#hi').innerHTML += `<br>` +inputs;
<div id="hi"></div>
该解决方案的核心思想是:
input
元素text
这可以通过以下简单脚本完成:
var input = document.createElement('input');
input.setAttribute('type', 'text');
document.getElementById('parent').appendChild(input);
现在的问题是,如何使该过程动态化。如问题中所述,在用户输入要生成的输入数量的地方还有另一个输入。可以按照以下步骤进行:
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>
但是通常仅添加输入并不是真正有用的,最好在输入中添加名称,以便可以将其轻松发送为表单。此代码段还添加了一个名称:
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>
查询并获取容器DOM元素
创建新元素
将新元素放入文档树
//Query some Dib region you Created
let container=document.querySelector("#CalculationInfo .row .t-Form-itemWrapper");
let input = document.createElement("input");
//create new Element for apex
input.setAttribute("type","text");
input.setAttribute("size","30");
containter.appendChild(input); // put it into the DOM
<button id="add" onclick="add()">Add Element</button>
<div id="hostI"></div>
<template id="templateInput">
<input type="text">
</template>
<script>
function add() {
// Using Template, element is created
var templateInput = document.querySelector('#templateInput');
var clone = document.importNode(templateInput.content, true);
// The Element is added to document
var hostI = document.querySelector('#hostI');
hostI.appendChild(clone);
}
</script>
现在推荐使用HTML模板来生成动态内容。