我正在创建一个表单来输入带有动态添加的行(as seen in this image)
的发票我正在使用jquery 1.6.2来计算行总数,汇总所有行总计,计算税额并显示总计。我遇到的问题是计算线路总数仅适用于第一个添加的行。正如您在上图所示,第一行(第1项)很好(2 * 30 = 60),但第二行(第2项)显示的总数与第一行相同(应为4 * 100) = 400)。以下是此部分的代码:
<script type="text/javascript">
var $k = jQuery.noConflict();
$k(function (){
$k('#item_form').live("keyup", "input[name^=linetotal]", function() {
var quantity = $k('input[name^=quantity]').val();
var unitprice = $k('input[name^=unitprice]').val();
$k('input[name^=linetotal]').val(quantity*unitprice);
var sum = $k('input[name^=linetotal]').sum();
$k('#subtotal').val(sum);
$k('#tax').val(Math.round(sum*10*100)/100);
$k('#total').val(Math.round((sum+Math.round(sum*10*100)/100)*100)/100);
});
});
</script>
关于我应该尝试什么的任何想法?谢谢大家!
答案 0 :(得分:1)
您正在使用$k(input[name^=quantity]').val();
获取数量/单价,但这会获取 所有 数量/单位价格输入,.val()
获取值第一个。
你需要在同一条线上获得一个,尽管你在等待linetotal
上的键盘很奇怪。你想要quantity
和unitprice
上的密钥吗?
$k('input[name^=quantity], input[name^=unitprice]').live("keyup", function() {
var quantity = parseFloat($k(this).parent().find('input[name^=quantity]').val());
var unitprice = parseFloat($k(this).parent().find('input[name^=unitprice]').val());
$k(this).siblings('input[name^=linetotal]').val(quantity*unitprice);
var sum = $k(this).siblings('input[name^=linetotal]').sum();
$k('#subtotal').val(sum);
$k('#tax').val(Math.round(sum*10*100)/100);
$k('#total').val(Math.round((sum+Math.round(sum*10*100)/100)*100)/100);
});
});
基本的jsfiddle演示:http://jsfiddle.net/jtbowden/YxJCF/
答案 1 :(得分:0)
我认为这是因为它采用了第一个输入[name ^ quantity]和第一个输入[name ^ unitprice]。由于两行具有相同的名称,因此必须确定代码的范围,以确保它只从其自己的行而不是其他行中提取。这有意义吗?