因为标题说我试图将输入标签添加到我基于下拉选择的表单中。这就是我到目前为止所做的:
HTML表格:
<form action="/next" method="POST" >
<select name="category" id="category" onchange="javascript: dropdownlist(this.options[this.selectedIndex].value);">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<div id="count">
<p>
<div id="something">
<input type="text" name="text" value="" >
<input type="text" name="othertext" value="" >
</div>
</p>
<span id="Room"></span>
</div>
<input type="submit" value="Next" >
</form>
然后是正在做我想要的Javascript:
function dropdownlist(listindex) {
document.Room = 0;
switch (listindex) {
case "1":
var check = document.getElementById('added');
if (check != null) {
element = document.getElementById('added');
element.parentNode.removeChild(element);
element = document.getElementById('added');
element.parentNode.removeChild(element);
element = document.getElementById('added');
element.parentNode.removeChild(element);
}
break;
case "2":
var check = document.getElementById('added');
if (check == null) {
var counter = 1;
var newFields = document.getElementById('something').cloneNode(true);
newFields.id = 'added';
var newField = newFields.childNodes;
for (var i = 0; i < newField.length; i++) {
var theName = newField[i].name
if (theName) newField[i].name = theName + counter;
}
var insertHere = document.getElementById('Room');
insertHere.parentNode.insertBefore(newFields, insertHere);
}
else {
var id = document.getElementById('count');
var countid = id.getElementsByTagName('p')
var number = countid.length;
if (number == 3) {
element = document.getElementById('added');
element.parentNode.removeChild(element);
}
}
现在这一切都很顺利,可能有更好的方法可以做到这一点,但因为我对javascript的经验很少,所以我能做到最好。现在的问题是:如果用户添加了3个元素然后决定实际返回到2,我必须检查添加了多少标签,我想出的解决方案要求我添加&lt; p为H.标记在div顶部创建的每个元素周围,以便我可以选择所有&lt; p为H. div中的标签,然后删除所需数量的标签。
这个解决方案很好但后来我注意到这与我的代码的早期部分混淆了,我将每个输入标记的名称更改为唯一的,这是我需要将信息存储在表单中。
那么有人可以建议我使用不同的解决方法来实现此功能吗?根据用户选择添加和删除输入标签,同时保留所有标签的唯一名称?任何帮助都将非常感谢!
答案 0 :(得分:1)
您的最大输入元素数量是否很小?如果是这样,您可以考虑在页面上预先合并所有,然后根据需要启用它们或设置其可见性:
document.form1.text1.disabled = true; // or false
document.form1.text1.style.visibility = "hidden"; // or "visible"
这需要首先命名表单和输入元素:
<form name="form1" ... >
<input type="text" name="text1" ... >
<input type="text" name="text2" ... >
这种方法比通过insertBefore()
,removeChild()
等操纵DOM简单得多。