Php JavaScript表单验证HTML表中的行
出于某些原因,我的javascript表单验证没有遍历表中的每一行。 我用以下代码创建了表: $usr变量只是另一个过程的结果:Php JavaScript表单验证HTML表中的行,php,javascript,html,Php,Javascript,Html,出于某些原因,我的javascript表单验证没有遍历表中的每一行。 我用以下代码创建了表: $usr变量只是另一个过程的结果: <form name="myForm" action="addAccessories.php" method="post" onsubmit="return validateForm(this);"> <table border="1" id="IT"> <tr>
<form name="myForm" action="addAccessories.php" method="post" onsubmit="return validateForm(this);">
<table border="1" id="IT">
<tr>
<th>Barcode<em>*</em></th>
<th>Current stock</th>
</tr>
<?php
for($id=1; $id<=$usr; $id++){
?>
<tr>
<td><input type="hidden" name="id[]" value="<?php echo $id; ?>" />
<input type="text" name="bar_code<?php echo $id; ?>" id="bar_code<?php echo $id; ?>" value="" /></td>
<td><input type="text" name="num_stock<?php echo $id; ?>" value="0" id="num_stock<?php echo $id; ?>"/></td>
<?php
}
?>
<tr>
<td> </td>
<td> <button data-theme="b" input type="submit" name="Submit" value="Submit">Add accessories</button></td>
</tr>
</table>
</form>
此表中的行数为:行=$usr+1
我的验证表单代码:
<script type="text/javascript">
function validateForm(){
var errors = [];
for(i = 1; i < document.getElementById("IT").rows.length; i++){
var barcode = document.getElementById('bar_code'+i).value;
var des = document.getElementById('description'+i).value;
var num_stock = document.getElementById('num_stock'+i).value;
if(barcode == null || barcode == ""){
errors[errors.length] = "You must enter barcode.";
}
if(isNaN(num_stock)){
errors[errors.length] = "Current stock must be an integer";
}
if(num_stock < 0){
errors[errors.length] = "Current stock must be a positive number";
}
if (errors.length > 0) {
reportErrors(errors);
return false;
}
return true;
}
}
function reportErrors(errors){
var msg = "There were some problems...\n";
for (var i = 0; i<errors.length; i++) {
var numError = i + 1;
msg += "\n" + numError + ". " + errors[i];
}
alert(msg);
}
</script>
此过程仅验证表中的第一行,然后停止。有人能告诉我哪里出了问题,以及如何修复吗?
非常感谢您的帮助您的代码使生活变得更加复杂。更简单的方法是只处理表单控件,例如,因为您已经从提交侦听器传递了对表单的引用:
function validateForm(form) {
var errors = [];
var c, cs = form.elements;
var reB = /^bar_code/;
var reN = /^num_stock/;
var reD = /^[0-9]+$/;
for (var i=0, iLen=cs.length; i<iLen; i++) {
c = cs[i];
if (reB.test(c.name) && c.value == '') {
errors.push('You must enter barcode.'];
} else if (reN.test(c.name) && !reD.test(c.value)) {
errors.push('Stock number must be a positive integer.'];
}
}
// deal with errors...
}
条形码是一个字符串,因此第一个测试永远不会返回true,如果您想查看它是否为空,第二个测试就足够了。您是否从Firebug或类似测试中发现任何错误?谢谢。然而,我试着按照你的建议使用,但根本不起作用。/^num\u stock/是否从表单中获取所有num\u stock?是。其思想是迭代表单控件并使用正则表达式匹配名称。/^num\u stock/应匹配以这些字符开头的字符串。
> barcode == null || barcode == ""