Javascript 同时计算表行平均值和总计
我试图计算出动态计算表行平均值所需的Javascript,然后还更新所有相同类型行的合计值。下面是一个简化的JSFIDLE,它说明了这一点: 用户可以从下拉列表中选择任何类型的水果,然后输入数量和周数。例如,如果他们选择“Apple”,输入5作为数字,输入26作为我想自动计算的周数,则计算平均值,在本例中为2.5(数字*周/52) 然后,我还想自动合计相同类型水果选择的平均值。目前它是合计数字列-我需要将此更改为平均列,并在计算平均值后进行此火灾。因此,如果用户在多行中选择了Apple,那么它将找到所有实例,并在Average列中合计值 我从另一个文件中得到了一些代码,这些代码将计算出平均值,但是我很难将2个脚本组合成1个,或者知道这是否是最佳选择,或者知道如何使用2个单独的脚本。以下是我找到的一些用于计算平均值的psuedo代码:Javascript 同时计算表行平均值和总计,javascript,jquery,html-table,Javascript,Jquery,Html Table,我试图计算出动态计算表行平均值所需的Javascript,然后还更新所有相同类型行的合计值。下面是一个简化的JSFIDLE,它说明了这一点: 用户可以从下拉列表中选择任何类型的水果,然后输入数量和周数。例如,如果他们选择“Apple”,输入5作为数字,输入26作为我想自动计算的周数,则计算平均值,在本例中为2.5(数字*周/52) 然后,我还想自动合计相同类型水果选择的平均值。目前它是合计数字列-我需要将此更改为平均列,并在计算平均值后进行此火灾。因此,如果用户在多行中选择了Apple,那么它
$("#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谢谢;乐于助人