1

javascript/は比較的新しくjQuery、期待した結果が得られません。入力値が 1 つしかない場合でも合計を表示したい、それ以外の場合は 0 を表示したい。ただし、現時点では、合計を表示する前に 3 つの値すべてを入力する必要があります。入力に入力すると、次の入力が合計に単純に追加されるわけではありません。各入力の .length をクロス チェックし、各入力に基づいて合計を返す一連の長い条件ステートメントを想像できます。確かに、より簡単でクリーンな方法が必要です。これが Java の場合、total += (変数) を使用し、それらを合計します。ここではうまくいかないようです。

    $('#invoice_labor, #invoice_materials, #invoice_other').keyup(function() {  
        if ($('#invoice_labor').length || $('#invoice_materials').length || $('#invoice_other').length ) {
            updateTotal();        
        } else {
            $('#invoice_total').html(0);
        }
    });     
    var updateTotal = function () {
        var input1 = parseFloat($('#invoice_labor').val(), 2);
        var input2 = parseFloat($('#invoice_materials').val(), 2);
        var input3 = parseFloat($('#invoice_other').val(), 2);
        var total = input1 + input2 + input3;      
        $('#invoice_total').html(total);
        $("#invoice_total").html(parseFloat($("#invoice_total").html()).toFixed(2));         
    };  

そして、これが私がいじっていたフィドルです。

そのため、数値を入力するフィールドに関係なく、合計を変更したいと考えています。1 つだけの場合は、それを合計変数に追加して返す合計。2 つの組み合わせの場合は、それらを組み合わせて合計に追加します。助けてくれてありがとう。

4

1 に答える 1

2

試す

$('#invoice_labor, #invoice_materials, #invoice_other').keyup(function() {  
    updateTotal();        
});     
var updateTotal = function () {
    var input1 = parseFloat($('#invoice_labor').val()) || 0;
    var input2 = parseFloat($('#invoice_materials').val()) || 0;
    var input3 = parseFloat($('#invoice_other').val()) || 0;
    var total =  input1 + input2 + input3;      
    $("#invoice_total").html(total.toFixed(2));         
};  

デモ:フィドル

あなたのフィドルにはほとんど問題がありません

  1. 入力キーアップ イベントをボディのキーアップ ハンドラーに登録していましたが、これは間違っていました。これにより、最初のキーストロークが認識されなくなり、後続の呼び出しで複数の updatetotal 呼び出しが発生します。
  2. フィールドが空の場合、parseFloat は NaN を返します。これを追加すると、結果として NaN になります。
  3. parseFloat は引数を 1 つだけ取ります
于 2013-08-07T02:32:32.077 に答える