添加新行时获取总计,删除行时减少

时间:2012-11-15 16:06:04

标签: jquery

我正在我的表中进行一些操作,因此如果用户添加新行,则可以设置数量,单位价格和总数将自动计算。这发生在每一行。当我添加每一行时,我试图在表格下面积累总数。否则应该在删除行时减少。

到目前为止,我只获得了我正在设置的行的总值。

$('.tablePuc, .tablePus, .tableQuantity').live('keyup', function () {
    var $row = $(this).closest('tr'); // all based on parent row
    var unitPc = $row.find('.tablePuc').val();
    var unitPs = $row.find('.tablePus').val();
    var qty = $row.find('.tableQuantity').val();
    var imp = 0.21;
    var totalSimp = unitPs * qty;
    var totalCimp = unitPc * qty + ((unitPc * qty) * imp);
    if (totalCimp) {
        $row.find('.tableTotal').val(totalCimp);
    } else if (totalSimp) {
        $row.find('.tableTotal').val(totalSimp);
    }
    $('#labelResult').html(totalSimp);
    $('#labelResult2').html(totalCimp);
});

可以在此fiddle

上看到示例

2 个答案:

答案 0 :(得分:0)

.live应该删除并使用.on而不是!

除此之外:

var rowCount = $('#table_id >tbody >tr').length;  //rowCount = number of rows of the table tbody!

您可以在每次添加/删除后使用它来重新计算总行数,或者只是将其存储在变量中并根据需要增加/减少它。我很可能每次重新计算它,因为表格不大。

您也可以这样使用它:

sum=0;
$('#table_id >tbody >tr').children().eq(n).each(function(){ //n is the row column where u want to get the data
     sum+=$(this).val();
});

如果你想一次性完成所有行孩子:

sum=[];
$('#table_id >tbody >tr').each(function(){
     x=0; 
     $(this).children().each(function(){ 
         sum[x]+=$(this).val();
         x++;
     });
});

答案 1 :(得分:0)

你应该迭代你表中的所有行...这样的事情应该有效:

$('table').on('keyup', '.tablePuc, .tablePus, .tableQuantity', updateTotal);


function updateTotal() {
    var totalSimpGlobal = 0;
    var totalCimpGlobal = 0;

    $("#tableSo").find("tr:gt(0)").each(function() {
        var $row = $(this); // all based on parent row
        var unitPc = $row.find('.tablePuc').val();
        var unitPs = $row.find('.tablePus').val();
        var qty = $row.find('.tableQuantity').val();
        var imp = 0.21;
        var totalSimp = unitPs * qty;
        totalSimpGlobal += totalSimp;
        var totalCimp = unitPc * qty + ((unitPc * qty) * imp);
        totalCimpGlobal += totalCimp;
        if (totalCimp) {
        $row.find('.tableTotal').val(totalCimp);
        } else if (totalSimp) {
            $row.find('.tableTotal').val(totalSimp);
        }

    });

    $('#labelResult').html(totalSimpGlobal);
    $('#labelResult2').html(totalCimpGlobal);
}

更新了小提琴:http://jsfiddle.net/3zV2G/3


修改

我更新了第一行以处理新行。