0

インスタンス化された item{n} など、可変長の動的フィールド名を持つフォームがあり、n は 1 または 30 であり、そのようなデータ行ごとに qty{n} * price{n} の小計を計算する必要があります。 、最後に小計を合計します。

フォームは次のようになります。

<form>
    <table name="forInstruction">
        <tr><td>... </td> <td>...</td> ... more td </tr>
        ....
    </table>

    <table name="forUserinput"> 
        <tr>
            <td><input type="text" id="item1">,</td> <td><input type="text" id="qty1">,</td> 
            <td><input type="text" id="price1">,</td> <td>fieldX1 t1 </td> ... more td
        </tr> 
        <tr>
            <td><input type="text" id="item2">,</td> <td><input type="text" id="qty2">,</td> 
            <td><input type="text" id="price2">,</td> <td>fieldX2,t2 </td> ... more td
            <td><input type="text" id="item3">,</td> <td><input type="text" id="qty3">,</td> 
            <td><input type="text" id="price3">,</td> <td>fieldX3,t3 </td> ... more td
            ... 
    </table>
    <input type="button" value="Calculate subtotal and total" ... /> 
</form> 

注: a) t{n} = 小計フィールド。b)上記のように、行数は不明です。1〜30の可能性があります。やりたいことは、小計と合計を計算することです。each subtotal = qty{n} * parseFloat(price{n}) フォーム全体をループしようとしています。qty{n} フィールドのすべての値を取得できますが、方法がわかりません。その対応する価格{n}の値を取得します。

var fQ=0,fP=0; 
st = 0; 
total = 0; 
for (f=0; f < document.qr.elements.length; f++) { 
    if (document.qr.elements[f].name.indexOf('qty')>=0) { 
        // alert(document.qr.elements[f].name + ' ' + document.qr.elements[f].value); 
        fQ = document.qr.elements[f].value; 
        // alert(fQ); 
    } 
    else if (document.qr.elements[f].name.indexOf('priceLabel')>=0) { 
        fP = document.qr.elements[f].value; 
    } 
    // what do we do here?  Or this is not the good way to go? 
} 

たぶん、フォーム全体をループするのは良い考えではありません...名前付きテーブルのデータ行だけですか? もしそうなら、どのように?

よろしくお願いします。

編集 1: アドバイスに応じて、新しいコード:

 var i = 0, t=0,
      element; 
   while ((element = forms[0].elements['qty' + i])) {
     var subtotal = forms[0].elements['qty' + i] * forms[0].elements['price' + i]; 
         forms[0].elements['total' + i].value = subtotal;
         t = t + parseFloat(subtotal);
         alert(t);
     // ... 
     i++; 

}

forms[0].elements['totalFinal'].value = t;

しかし、エラー メッセージ: "ReferenceError: フォームが定義されていません"。どうして?ありがとう。

4

0 に答える 0