同时计算表行平均值和总计

时间:2012-08-01 02:16:35

标签: javascript jquery html-table

我正在尝试计算动态计算表格行平均值所需的Javascript,然后还更新所有相同类型行的总计。这是一个简化的jsfiddle,说明了这一点:

http://jsfiddle.net/fmdataweb/5ZtQZ/3/

用户可以从下拉列表中选择任何类型的水果,然后输入数字和周数。例如,如果他们选择“Apple”并输入5作为数字,并输入26周,我想自动计算平均值,在这种情况下为2.5(数字*周/ 52)。

我还希望自动计算相同类型水果选择的平均值。目前,它总计了Number列 - 我需要将其更改为Average列,并在计算平均值后触发此值。因此,如果用户在多行中选择了Apple,那么它将找到所有这些实例并将该值总计在Average列中。

我从另一个文件中获得了一些可以达到平均水平的代码,但是我在将2个脚本合并为1时遇到了问题,或者知道这是否是最佳选择,或者知道如何使用2个单独的脚本。这是我在计算平均值时发现的一些伪代码:

$("#fruit input").live("keyup", function(){
var id = this.id.match(/\d+/);
var number = ( ($("#number"+id).val() * $("#weeks"+id).val()  )/52 );
var rounded = Math.round( number * 10 ) / 10;
$("#average"+id).val( rounded );

如果能让一切变得更轻松,那么很高兴使用ID。感谢是否有人可以启发我如何实现这一点,或者你是否可以指出任何类似的例子。我是Javascript的新手。

1 个答案:

答案 0 :(得分:1)

我尝试了另一种方式,但是要工作:

迭代tr单元格,并计算使用.map()

选择的每个选项的总和

这是JS:

$('#fruits')
    .on('change', 'select', calc)
    .on('keyup', 'input', calc);

function calc(){

    $('#fruits tr:has(.fruit)').each(function(i,v){

        var $cel = $(v.cells);

        var $fruit = $cel.eq(1).find('option:selected').val();
        var $numb = $cel.eq(2).find('input').val();
        var $weeks = $cel.eq(3).find('input').val();
        var $avg = ($numb * $weeks) / 52;

        $cel.eq(4).find('input').val($avg);

    });   

    var tot = {};

    $('#fruits tr:has(.fruit) option:selected')
                .map(function(i){
                    var el = $(this).val();
                    var qty = parseFloat($('#fruits tr:has(.fruit)').eq(i).find('td:last input').val());
                    if (!tot.hasOwnProperty(el)) {
                        tot[el] = 0;            
                    }
                    tot[el] += qty
                    return tot;
                }).get();

    //console.log(tot);
    $('#sumApple').text(tot.Apple);
    $('#sumBanana').text(tot.Banana);
    $('#sumMango').text(tot.Mango);

}

THIS是小提琴

PS:我没有做数字控制,bu与你的相同