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

Javascript 同时计算表行平均值和总计,javascript,jquery,html-table,Javascript,Jquery,Html Table,我试图计算出动态计算表行平均值所需的Javascript,然后还更新所有相同类型行的合计值。下面是一个简化的JSFIDLE,它说明了这一点: 用户可以从下拉列表中选择任何类型的水果,然后输入数量和周数。例如,如果他们选择“Apple”,输入5作为数字,输入26作为我想自动计算的周数,则计算平均值,在本例中为2.5(数字*周/52) 然后,我还想自动合计相同类型水果选择的平均值。目前它是合计数字列-我需要将此更改为平均列,并在计算平均值后进行此火灾。因此,如果用户在多行中选择了Apple,那么它

我试图计算出动态计算表行平均值所需的Javascript,然后还更新所有相同类型行的合计值。下面是一个简化的JSFIDLE,它说明了这一点:

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

然后,我还想自动合计相同类型水果选择的平均值。目前它是合计数字列-我需要将此更改为平均列,并在计算平均值后进行此火灾。因此,如果用户在多行中选择了Apple,那么它将找到所有实例,并在Average列中合计值

我从另一个文件中得到了一些代码,这些代码将计算出平均值,但是我很难将2个脚本组合成1个,或者知道这是否是最佳选择,或者知道如何使用2个单独的脚本。以下是我找到的一些用于计算平均值的psuedo代码:

$("#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。

我尝试了另一种方法,但仍然无法工作:

在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);

}
小提琴是什么


PS:我没有做过数控,bu和你的一样

我尝试过不同的方法,但我想工作:

在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);

}
小提琴是什么


PS:我没有做过数字控制,bu和你的一样

作为旁注:不要使用
live()
,它从1.7版开始就被弃用,并被
on()
取代,因为它有许多缺点
on()
能够完全满足所有绑定要求。如果您使用的是jQuery 1.7之前的版本,请使用
bind()
delegate()
。有关更多详细信息,请参阅本文:作为旁注:不要使用
live()
,它自1.7版起就被弃用,并被
on()
取代,因为它有许多缺点
on()
能够完全满足所有绑定要求。如果您使用的是jQuery 1.7之前的版本,请使用
bind()
delegate()
。有关更多详细信息,请参阅本帖:非常感谢,看来这会很有效。@user982124谢谢;很高兴有用,非常感谢,看起来它会很有用。@user982124谢谢;乐于助人