好的,我已经创建了一个发票,根据发票项目的数量,它将在每个项目旁边生成一个复选框以供审批。每个复选框的名称为 invoiceApproval
。
到目前为止,我的脚本将计数以查看有多少输入具有该名称,然后为每个输入分配一个 ID invoiceApproval
ID = invoiceApproval[i]
这工作得很好,但是现在当我使用 JavaScript 表单验证时:快速简便!在 HTML 表单中为每个 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>
生成复选框的 PHP 循环是:
while($row = mysql_fetch_array($result))
{
echo "<input type='checkbox' value='x' name ='invoiceApproval' > Approve";
}
库的代码正在使用
var itemobj = this.formobj[itemname];
以检索表单项。后来它做到了
if (itemobj.length && isNaN(itemobj.selectedIndex))
{
itemobj = itemobj[0];
}
这意味着如果有多个具有相同名称的项目,它将始终选择第一个。为表单字段的引用取名就是这样不好的做法
唯一的解决方案(如果你想使用这个库,但我会远离它,它写得真的很差)是让你的名字不一样。
旁注
该行
var inc = "invoiceApproval"+[i];
正在创建一个包含单个值的数组,然后对其调用 toString,toString
(幸运的是您)返回单个值数组作为值本身。摆脱那些括号,它应该是
var inc = "invoiceApproval"+i;