我正在尝试计算动态计算表格行平均值所需的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的新手。
答案 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与你的相同