我有一个动态字段名称可变长度的表单,例如,项目{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。 我想做的是:计算小计和总计。 每个小计= qty {n} * parseFloat(价格{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;
但是错误信息: &#34; ReferenceError:表单未定义&#34;。怎么会?感谢。