0

さて、請求されたアイテムの数に応じて、承認のために各アイテムの横にチェックボックスが生成される請求書を作成しました。各チェックボックスには name がありますinvoiceApproval

これまでのところ、私のスクリプトは名前を持つ入力の数を数えてからinvoiceApproval、ID = でそれぞれに ID を割り当てます。invoiceApproval[i]

それは完全に機能していますが、JavaScript フォーム検証を使用すると、すばやく簡単になります。HTML フォームでは、各 IDに を割り当てfrmvalidator.addValidationます (それぞれの数は name を持つチェックボックスの数と同じです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 に答える