2012-08-01 77 views
1

我试图找出计算平均在飞行表行,然后同时更新总为所有同类型行所需要的JavaScript。下面是说明了这个简化的jsfiddle:计算表行平均数和总数在同一时间

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

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

我还要再像自动全为同一类型的水果选择的平均值。目前它总计数字列 - 我需要将其更改为“平均值”列,并在计算平均值后进行此操作。因此,如果用户在多行中选择了苹果,那么它会查找所有实例并在“平均值”列中总计该值。

我得从另一个文件,将制定出平均一些代码,但我有麻烦了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如果让一切easer。感谢任何人都可以启发我如何做到这一点,或者如果你能指出任何类似的例子。我在这个阶段是一个Javascript新手。

+0

作为一个侧面说明:不要使用'活()',它已经从1.7版本过时,用'取代的()',由于它的许多弊端。 on()可以完全满足所有的绑定需求。如果你使用jQuery pre 1.7,使用'bind()'或'delegate()'。看到这个职位的详细信息:http://stackoverflow.com/questions/11148019/what-are-the-significant-differences-among-sel-bindclick-sel-click/11148053#11148053 – Nope 2012-08-01 21:27:51

回答

1

我尝试用不同的方式,但SEMM工作:

迭代在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是一样的你的

+0

非常感谢,看起来像它将工作一种享受。 – user982124 2012-08-14 12:10:59

+0

@ user982124谢谢;很高兴有用 – 2012-08-14 12:13:22