Javascript-对于每个名称集,ID等于Name[i]并验证

Javascript-对于每个名称集,ID等于Name[i]并验证,javascript,validation,Javascript,Validation,好的,我已经创建了一个发票,根据发票项目的数量,它将在每个项目旁边生成一个复选框以供批准。每个复选框都有名称invoiceApproval 到目前为止,我的脚本将计数以查看有多少输入具有名称invoiceApproval,然后为每个输入分配一个ID=invoiceApproval[i] 这很好,但现在,当我使用为每个ID分配frmvalidator.addValidation(每个ID的数量等于名称为invoiceApproval的复选框的数量)时,它只验证ID为invoiceApproval0

好的,我已经创建了一个发票,根据发票项目的数量,它将在每个项目旁边生成一个复选框以供批准。每个复选框都有名称
invoiceApproval

到目前为止,我的脚本将计数以查看有多少输入具有名称
invoiceApproval
,然后为每个输入分配一个ID=
invoiceApproval[i]

这很好,但现在,当我使用为每个ID分配
frmvalidator.addValidation
(每个ID的数量等于名称为
invoiceApproval
的复选框的数量)时,它只验证ID为
invoiceApproval0
的第一个框

为什么我的“针对每个人”只适用于第一个实例???我在这里做错了什么:

<script type="text/javascript"> 
    var frmvalidator  = new Validator("forminvoice"); 

    var inva = document.getElementsByName("invoiceApproval");
    for (var i = 0; i < inva.length;i++) {
        var inc = "invoiceApproval"+[i];
        inva[i].setAttribute("id",inc); 
    }


    var inva = document.getElementsByName("invoiceApproval");
    for (var i = 0; i < inva.length;i++) {
        var inc = "invoiceApproval"+[i];
        frmvalidator.addValidation(inc,"shouldselchk=x","You must check off each item on the right hand side of the invoice before you can submit approval.");
    }
</script>

var frmvalidator=新的验证器(“forminvoice”);
var inva=document.getElementsByName(“发票审批”);
对于(变量i=0;i
生成复选框的PHP循环是:

while($row = mysql_fetch_array($result))
{
    echo "<input type='checkbox'  value='x' name ='invoiceApproval' > Approve";  
}
while($row=mysql\u fetch\u array($result))
{
回应“批准”;
}

库的代码正在使用

var itemobj = this.formobj[itemname];
检索表单项。后来是的

if (itemobj.length && isNaN(itemobj.selectedIndex))
{
    itemobj = itemobj[0];
}
这意味着,如果有多个项目具有相同的名称,它将始终选择第一个项目。使用名称作为表单字段的引用是非常糟糕的做法

唯一的解决方案(如果你想使用这个库,但我不想使用它,因为它写得很糟糕)是让你的名字不一样

旁注

线路

var inc = "invoiceApproval"+[i];
正在创建一个包含单个值的数组,然后对其调用toString,
toString
(您很幸运)返回一个单值数组作为值本身。去掉那些括号,应该是

var inc = "invoiceApproval"+i;

展示一个生成的HTML示例也会很有帮助。出于兴趣,您使用
[i]
而不是
i
有什么特殊原因吗?为什么不在PHP中添加
i