我有一个动态添加的文本框的javascript代码,具体取决于客户购买的商品数量和每个商品的总金额。每个数量乘以金额。我不能做的就是将它们全部添加。我该如何实现?我使用了while循环,但它只返回了最后一项。我知道逻辑,我只是不知道如何保存每个项目的总金额,然后将其添加到下一个项目。希望有人能提供帮助。感谢。
function totalBillItem(rowcount){
var quantity = parseFloat($("#quantity"+rowcount).val());
var payment_interval = parseFloat($("#payment_interval").val());
var billing_price = parseFloat($("#billing_price"+rowcount).val());
var product = (quantity * billing_price).toFixed(2);
$("#total"+rowcount).val(product);
while(rowcount != 0) {
var sub_total = parseFloat($("#total"+rowcount).val());
rowcount--;
}
var grand_total = sub_total;
$("#grand_total").val(grand_total);
}
我的HTML:
<table class="table table-striped table-hover" id="myTable">
<tr>
<th style="text-align:center;background-color:#89CFF0;">Name</th>
<th style="text-align:center;background-color:#89CFF0;">Product Price</th>
<th style="text-align:center;background-color:#89CFF0;">Quantity</th>
<th style="text-align:center;background-color:#89CFF0;">Billing Price</th>
<th style="text-align:center;background-color:#89CFF0;">Total</th>
</tr>
<?php
$row_count=0;
$offset=0;
foreach( $data as $row ) :
$dta = unserialize($row->userdata);
?>
<tr class="info">
<td style="text-align:center;" id="prod_name<? echo $row_count; ?>"><?php echo $dta['product_name']; ?></td>
<td style="text-align:center;" id="product_amount<? echo $row_count; ?>"><?php echo $dta['product_amount']; ?></td>
<td style="text-align:center;">
<input type="text" name="quantity<? echo $row_count; ?>" id="quantity<? echo $row_count; ?>" class="span2" onkeydown="totalBillItem('<?php echo $row_count; ?>')" onkeyup="totalBillItem('<?php echo $row_count; ?>')" value="0">
</td>
<td style="text-align:center;">
<input type="text" name="billing_price<? echo $row_count; ?>" id="billing_price<? echo $row_count; ?>" class="span2" onkeydown="totalBillItem('<?php echo $row_count; ?>')" onkeyup="totalBillItem('<?php echo $row_count; ?>')" value="0">
</td>
<td style="text-align:center;">
<input type="text" name="total<? echo $row_count; ?>" id="total<? echo $row_count; ?>" class="span2" readonly>
</td>
</tr>
<input type="hidden" name="prod_uuid<? echo $row_count; ?>" value="<? echo $dta['product_uuid']; ?>">
<input type="hidden" name="prod_amount<? echo $row_count; ?>" value="<? echo $dta['product_amount']; ?>">
<?php
$row_count++;
endforeach;
?>
<input type="hidden" name="row_ctr" value="<? echo $row_count; ?>">
</table>
<br />
Total:
<input type="text" name="grand_total" id="grand_total" class="span2" readonly>
我怎么能这样做? http://jsfiddle.net/c4rjk/
答案 0 :(得分:0)
看到发生的事情有点困难,但我确实在这段代码中看到了问题:
while(rowcount != 0){
var sub_total = parseFloat($("#total"+rowcount).val());
rowcount--;
}
你只是在每个循环上重置sub_total,当你退出while循环时它实际上超出了范围(不知道在Javascript中是否重要)。
将此更改为以下内容:
var sub_total = 0;
while(rowcount != 0){
sub_total += parseFloat($("#total"+rowcount).val());
rowcount--;
}
编辑:
这是计算总数的另一种方式。
将类名添加到html中的“total”行:(现在替换span2,但您可以稍后更改)
<input type="text" class = "total" name="total<? echo $row_count; ?>" id="total<? echo $row_count; ?>" readonly>
用这个替换while循环:
var total_element = document.getElementsByClassName('total');
var sub_total = 0;
for (var i = 0; i < total_element.length; ++i) {
var item = total_element[i];
if (total_element[i].value) sub_total += parseFloat(total_element[i].value);
}
请注意,IE8或之前不支持getElementsByClassName :(