0

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

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

这是完美的工作,但现在当我使用JavaScript 表单验证时:快速简单!在 HTML 表单中为每个 ID 分配一个frmvalidator.addValidation(每个 ID 的数量等于具有该名称的复选框的数量invoiceApproval)它仅验证具有 ID 的第一个框invoiceApproval0

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

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

生成复选框的 PHP 循环是:

while($row = mysql_fetch_array($result))
{
    echo "<input type='checkbox'  value='x' name ='invoiceApproval' > Approve";  
}
4

1 回答 1

0

图书馆的代码正在使用

var itemobj = this.formobj[itemname];

检索表单项。后来确实

if (itemobj.length && isNaN(itemobj.selectedIndex))
{
    itemobj = itemobj[0];
}

这意味着如果有多个具有相同名称的项目,它将始终选择第一个。取名字来引用你的表单域是很糟糕的做法

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

边注

线

var inc = "invoiceApproval"+[i];

正在创建一个包含单个值的数组,然后在其上调用 toString,并且toString(幸运的是)返回单个值数组作为值本身。摆脱那些括号,它应该是

var inc = "invoiceApproval"+i;
于 2012-11-28T22:16:47.727 回答