Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JavaScript表单验证HTML表中的行_Php_Javascript_Html - Fatal编程技术网

Php JavaScript表单验证HTML表中的行

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>

出于某些原因,我的javascript表单验证没有遍历表中的每一行。 我用以下代码创建了表: $usr变量只是另一个过程的结果:

<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 == ""