2014-10-31 25 views
0

我有类似以下内容的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

每个“”的“id”属性应该是唯一的。 – 2014-10-31 23:02:03

+0

这是一个伪代码还是一种方言,或者您是否忘记了条件周围的“(...)”? – 2014-10-31 23:02:25

+0

“FormElement.elements”集合将包含一个Array Like Object,如果您使用的是“ID”,则您可以循环搜索“

”中的所有输入。另一个解决方案可能是'document.getElementsByTagName('input')'。 – PHPglue 2014-10-31 23:04:01

回答

0

元素的ID必须是唯一的。

<input id="itemid" name="itemid" type="text" size="20" /> 

因此,在每一行中您都希望itemid的值不同。其次检查你是否有声明。圆括号缺失,你将值赋给x而不是比较它。

对于您可以使用getElementByTagName(见VSYNC的答案)

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 
    } 
} 
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]''。无论如何,这就是逻辑。

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,因为它们必须有一个名字才能成功,并且可以通过它进行访问。

请注意,上述工作与文档的结构无关,无论某些表格是否在其他表格中,或者即使控件实际上处于表格中(只要它们与使用form的表单关联属性)。表单中的控件将自己的表格属性自动设置为其所在的表格。