ユーザーが 2 つの数字を入力できる単純なテーブルがあり、スクリプトは年間平均を計算し、選択メニューに同じオプションがあるすべての行の合計を取得します。
サンプルの JSFiddle をセットアップしました。
http://jsfiddle.net/fmdataweb/73Jzc/1/
これは、これがどのように機能するかを示しています。ときどき奇妙な丸めエラーが発生することに気付きました (小数点以下 1 桁に丸めたい)。たとえば、「中程度」を選択し、平均 0.4 に対して 5 と 4 を入力し、ボタンをクリックして新しい行を作成し、もう一度「中程度」を選択してから、平均 2.3 に対して 3 と 40 を入力すると、中程度の合計は「2.6999999999999997」ですが、2.7 のはずです。
他の数値を入力しても、私のテストではこれまでのところ問題ありませんが、何らかの理由でこれらの組み合わせが合計で四捨五入されず、その理由がわかりません。誰かが私のスクリプトのエラーを指摘していただければ幸いです。平均と合計を行うスクリプトは次のとおりです。
$('#nextYear')
.on('change', 'select', calc)
.on('keyup', 'input', calc);
function calc(){
$('#nextYear tr:has(.risk)').each(function(i,v){
var $cel = $(v.cells);
var $risk = $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;
var $avgRounded = Math.round( $avg * 10 ) / 10;
$cel.eq(4).find('input').val($avgRounded);
});
var tot = {};
$('#nextYear tr:has(.risk) option:selected')
.map(function(i){
var el = $(this).val();
var qty = parseFloat($('#nextYear tr:has(.risk)').eq(i).find('td:last').prev().find('input').val());
if (!tot.hasOwnProperty(el)) {
tot[el] = 0;
}
tot[el] += qty
return tot;
}).get();
// console.log(tot);
$('#textfield6').val(tot.moderate);
$('#textfield7').val( tot.high );
}
</p>