2017-08-30 2 views
2

私はGoogleのスクリプトでHTML Webアプリケーションを作成しました。これは電卓のように機能しますが、このアプリケーションは降順で入力を追加してもうまく動作しますが、その後、私はきちんとGoogle Web HTML Appの価値計算の問題

例の出力を取得しておりません任意の列でランダムに数字: - あなたは合計数の違い

を見つけるボックス番号1に更新したボックス番号4で数字を更新し、5を参照してください詳細スクリプトの添付シート Project Name- Project Proposal Form

$("#rTpe1").keyup(function(e){ 
 
     $("#rFor1").val(this.value * $("#PerHourRate1").val()); 
 
     $("#rFor3").val(Number($("#rFor1").val()) +Number($("#rFor2").val())) 
 
    }); 
 
    
 
    $("#rTpe2").keyup(function(e){ 
 
     $("#rFor2").val(this.value * $("#PerHourRate2").val()); 
 
     $("#rFor3").val(Number($("#rFor1").val()) + Number($("#rFor2").val())) 
 
    }); 
 
    $("#rTpe12").keyup(function(e){ 
 
     $("#rFor12").val(this.value * $("#PerHourRate3").val()); 
 
     $("#rFor3").val(Number($("#rFor1").val()) + Number($("#rFor2").val())+ Number($("#rFor12").val())) 
 
    }); 
 
    $("#rTpe13").keyup(function(e){ 
 
     $("#rFor13").val(this.value * $("#PerHourRate4").val()); 
 
     $("#rFor3").val(Number($("#rFor1").val()) + Number($("#rFor2").val())+ Number($("#rFor12").val())+ Number($("#rFor13").val())) 
 
    }); 
 

答えて

0

私は間違っているかもしれないが、私はそれが主犯だと思う:

enter image description here

下にあなたの仕事は、あなたの方法のトップ場合は、'#rFor3'で出力されます影響を受けません。あなたが最初のフィールド(「#rTpe1」)に値を入力した場合「#rFor2」は、おそらくこの時点で、空の文字列が含まれているため、例えば、この文

Number($("#rFor2").val())) 

は「0」と評価されますとNumber( "")はゼロになります。後続のすべての入力フィールドは、前の計算結果(「rTpe2」参照「rFor1」「rTpe12」参照双方「rFor1」「rFor2」など)を参照するため、合計が来ます正しいものとして出てください。

逆のシナリオを考えてみましょう。簡単にするために、あなたは「rTpe12」に「5」の値を入力した場合、の値が「rFor3」は "

Number("") + Number("") + Number(5*1) == 5; //the first two inputs will contain empty strings at this point 

出力されますのは、1.すべてのあなたの評価は同じにしましょう#rFor3'手順を上がるとの値が入力した場合は5になり 『rTpe2』 に 『2』を『の値rFor3』出力が変化します

Number("") + Number(2*1) == 2; the first input will contain an empty string. 

のThへeコードは理解しにくいので、このソリューションがうまくいかない場合でも、パフォーマンスを向上させてコードを読みやすくするためにDOM要素をキャッシュすることを検討してください。現在、DOMを何度も検索するためにjQueryセレクタを使用していますが、これは重大なパフォーマンスの問題です。計算された値を変数として保存し、各入力で再計算するのではなく、単に値を追加することもできます。例えば、

$('document').ready(function(){ 

var total = 0; 
var input1 = $('#input1'); 
var input2 = $('#input1'); 
var input3 = $('#input1'); 
var output = $('#output'); 

input1.keyup(function(e){ 

var value = Number(this.value); 
sum += value; 
output.val(sum); 

}); 



});