使用动态添加的行计算表单中的行总计

时间:2012-03-20 20:31:37

标签: javascript forms jquery jquery-plugins

我正在创建一个表单来输入带有动态添加的行(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>   

关于我应该尝试什么的任何想法?谢谢大家!

2 个答案:

答案 0 :(得分:1)

您正在使用$k(input[name^=quantity]').val();获取数量/单价,但这会获取 所有 数量/单位价格输入,.val()获取值第一个。

你需要在同一条线上获得一个,尽管你在等待linetotal上的键盘很奇怪。你想要quantityunitprice上的密钥吗?

 $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]。由于两行具有相同的名称,因此必须确定代码的范围,以确保它只从其自己的行而不是其他行中提取。这有意义吗?