1

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

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

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

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

我从另一个文件中获得了一些代码,可以计算出平均值,但是我无法将 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 的新手。

4

1 回答 1

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

}

这就是小提琴

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

于 2012-08-01T07:49:51.617 回答