インスタンス化された 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: フォームが定義されていません"。どうして?ありがとう。