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
?