0

テーブルでいくつかの操作を行っているので、ユーザーが新しい行を追加すると、数量、単価を設定でき、合計が自動的に計算されます。これは各行で発生します。各行が追加されたときに累積されるテーブルの下の合計を取得しようとしています。それ以外の場合は、行が削除されたときに減少するはずです。

これまで、設定している行の合計値のみを取得しています。

$('.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);
});

このフィドルで例を見ることができます

4

2 に答える 2

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++;
     });
});
于 2012-11-15T16:14:27.233 に答える
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


編集

新しい行に対処するために、最初の行を更新しました。

于 2012-11-15T16:23:07.070 に答える