【发布时间】:2010-02-22 12:33:13
【问题描述】:
我有一个用 div 分成不同部分的大表单。每个部分都在同一个表单(bigform)中,我需要确保一次只启用/可编辑一个部分。如果用户在将数据输入到一个部分后更改了部分,则所有数据将从旧部分中清除,然后再禁用它。对我来说理想的方式是拥有这样的东西:
<form>
<select name="selector">
<option>Choose Which Div To Enable</option>
<option value='1'>One</option>
<option value='2'>Two</option>
<option value='3'>Three</option>
</select>
</form>
<form name="bigform">
<div id="1">
<input type="text">
<select name="foo">
<option>bar</option>
<option>bar</option>
</select>
</div>
<div id="2">
<input type="text">
<select name="foo">
<option>bar</option>
<option>bar</option>
</select>
</div>
<div id="3">
<input type="text">
<select name="foo">
<option>bar</option>
<option>bar</option>
</select>
</div>
</form>
当用户在选择器表单中选择选项“Two”时,DIV 1 和 3 中的所有表单元素都将被禁用。我已经在网上搜索了几个小时,但找不到解决方案。实现这一目标的最佳方法是什么?
我在网上找到了这段代码,它“几乎”能满足我的需求,但并不完全。它“切换”给定元素 (el) 中的表单元素。我正在尝试做的是与此相反的事情。
<form>
<select name="selector" onChange="toggleDisabled(document.getElementByID(this.value))>
<option>Choose Which Div To Enable</option>
<option value='1'>One</option>
<option value='2'>Two</option>
<option value='3'>Three</option>
</select>
</form>
<script>
function toggleDisabled(el){
try {
el.disabled = el.disabled ? false : true;
}
catch(E){}
if (el.childNodes && el.childNodes.length > 0) {
for (var x = 0; x < el.childNodes.length; x++) {
toggleDisabled(el.childNodes[x]);
}
}
}
</script>
【问题讨论】:
-
我不太明白.. 是否要禁用所选 Div 中的所有元素?
-
我已经编辑了表单,以更清楚地表明我并不是要阻止某些输入元素被提交,而是一次只为用户提供一个部分。
-
你的意思是,如果他完成了对 Div1 的填充和选择,它将被禁用,而 Div2 将被启用..等等?
-
请看一下。我试图澄清。
标签: javascript