我有一个HTML表,其中重复的输入行类似于以下内容:
<table id="tableInput">
<thead>
<tr>
<th>Col 1</th>
<th>Col 2</th>
</tr>
</thead>
<tbody id='abc'>
<tr>
<td><input id="itemid" name="itemid" type="text" size="20" /></td>
<td>Col2 desc</td>
</tr>
<tr>
<td><input id="itemid" name="itemid" type="text" size="20" /></td>
<td>Col2 desc</td>
</tr>
</tbody>
</table>
如何在验证循环中引用输入ID?类似的东西:
i=0;
while i < document.getElementById("tableInput").tBodies.length {
x = document.getElementById("tableInput").tBodies[i].input.value);
if x = "" {
errorMsg = 1;
}
i++;
}
答案 0 :(得分:0)
元素的ID必须是唯一的。
<input id="itemid" name="itemid" type="text" size="20" />
因此,在每一行中,您需要itemid
的不同值。其次检查你是否陈述。缺少括号,您将x赋值,而不是比较它。
对于循环,您可以使用getElementByTagName
(请参阅vsync的答案)
答案 1 :(得分:0)
费利克斯说的是真的,id
必须才是唯一的。 (如果你不使用它,你也可以删除它)
但请尝试循环tableInput
内的所有输入。
var scope = document.getElementById('#tableInput');
var inputs = scope.getElementsByTagName('input');
// traverse on all the input elements inside "tableInput"
for( var i = inputs.length; i--; ){
// if some input has no value then..
if( !inputs[i].value ){
errorMsg = 1;
// inputs[i].id // access the ID
}
}
答案 2 :(得分:0)
也许你应该尝试类似的东西:
var ipts = document.getElementsByTagName('input'), inVals = [], errors = [];
for(var i=0,l=ipts.length; i<l; i++){
var ip = ipts[i];
if(ip.type === 'text'){
inVals.push(ip.value);
}
}
for(var i in inVals){
if(inVals[i] === ''){
errors[i] = 'required error';
}
}
如果errors[4]
为'required error'
, inVals[4]
将包含''
。无论如何,这是逻辑。
答案 3 :(得分:0)
目前还不清楚你要做什么。您可以使用其elements集合获取表单中的所有控件,例如
var form = document.getElementById('tableInput');
var controls = form.elements;
for (var i=0, iLen=controls.length; i<iLen; i++) {
// do stuff with controls[i]
// to do stuff with just input elements
if (controls[i].tagName.toLowerCase() == 'input') {
console.log(controls[i].name);
}
// and so on…
}
如上所述,元素ID 应该是唯一的,但如果它们不是,则不会发生任何严重的事情。它只是使 getElementById 有点无用。但是表单控件应该很少需要id,因为它们必须具有成功的名称并且可以通过它访问。
请注意,无论文档的结构如何,上面的工作都是有效的,有些是在表中而有些不在表中,或者即使控件实际上是在表单中(只要它们与表单相关联{{ 3}}属性)。表单中的控件将表单属性自动设置为他们所在的表单。