0

税フィールドを追加しようとしています。私はこれを整数で動作させていますが、「。5」を入力できる必要があります。isNANのせいか、この問題を解決するための手がかりはありませんが、ここでは問題ないと思いました。

http://jsfiddle.net/thetylercox/eeMva/3/

私の現在のコード

$(document).ready(function() {
    calculateSum();
    $(".txt").keyup(function() {
        $(".txt").each(function() {
            calculateSum();
        });
    });
});

$("#tax").keyup(function() {
    $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
);

function calculateSum() {
    var sum = 0;
    $("#sum").val(sum.toFixed(2));
    //iterate through each textboxes and add the values
    $(".txt").each(function() {
        //add only if the value is number
        if (!isNaN(this.value) && this.value.length != 0) {
            sum += parseFloat(this.value);
        }
    });
    $("#sum").html(sum.toFixed(2));
    var subtotal = document.getElementById("subtotal").value == "";
    var subtotal = document.getElementById("subtotal").value = sum;


    function getTax(tax) {
        var taxFloat = parseFloat(tax)
        if (isNaN(taxFloat)) {
            return 1;
        } else {
            return taxFloat;
        }
    }

    var total = getTax($('#tax').val()) * sum;
    var total1 = document.getElementById("total1").value = total;
} ​

ありがとう

4

3 に答える 3

3

これを試して:

  • 関数を含むすべてのコードを$(document).ready(function(){...})構造内に配置します。
  • 税を含むすべての計算を 内で実行しますcalculateSum()
  • 全体を通して jQuery を使用し、特に '$(...)' を優先して使用し.getelementById(...)ます。
  • calculateSumすべてのユーザー入力可能フィールドの「keyup」ハンドラーとしてアタッチします。
  • コードからあらゆる種類のがらくたを一掃する

次のようになります。

$(document).ready(function(){
    function getTax() {
        var taxFloat = parseFloat($("#tax").val());
        return isNaN(taxFloat) ? 1 : taxFloat;
    }

    function calculateSum() {
        var sum = 0;
        $(".txt").each(function() {
            if (this.value && !isNaN(this.value)) {
                sum += parseFloat(this.value);
            }
        });
        $("#subtotal").val(sum.toFixed(2));
            $("#total1").val((getTax()*sum).toFixed(2));
    }

    $(".txt, #tax").keyup(calculateSum);
});

デモ

おそらく、税アルゴリズムをより論理的なものに変更したいと思うでしょう。例えば。入力値 5(%) の場合、乗数は 1.05 になります。

于 2012-07-19T00:39:51.517 に答える
0

税金はパーセンテージに基づいています。次の変更を行います。

$("#tax").keyup(function() { 
    //$('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
    calculateSum();
    });

...

function getTax(tax) {
        var taxFloat = parseFloat(tax)
        if (isNaN(taxFloat)) {
            return 1;
        } else {
            // 1(subtotal) + ?(tax%) -> total = (1 + tax%) * subtotal
            return 1 + (taxFloat/100);
        }
    }

    var total = getTax($('#tax').val()) * sum;
    // round to 2 decimal digits
    total = Math.round(total * Math.pow(10, 2)) / Math.pow(10, 2);
    var total1 = document.getElementById("total1").value = total;

したがって、5% の場合は 5 と入力し、0.5% の場合は 0.5 と入力します。

更新: (実際には更新ではありません) より多くの回答が寄せられているので、税金フィールドの使用に関する論理エラーを繰り返します。税金は世界中でパーセンテージです。つまり、キーアップの処理だけでなく、税金の値の使用方法にも問題があったということです。

于 2012-07-19T00:24:25.450 に答える
0

エラーが見つかりました:

$("#tax").keyup(function() {
     $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
});

ここでは、関数 で行うように、 のparseInt代わりに を使用して税を解析します。NaN を与える.税金を挿入した後に入力に値を挿入してみてください。関数を呼び出すときに機能します。parseFloatgetTaxparseInt(".5").txtcalculateSum

#taxフィールドでキーを押すときに、他のフィールドで通常のキーを押すのとは異なる計算を使用する理由がわかりません。同じリスナー関数を使用するか、機能を分割する場合は関数を呼び出して、#taxキーハンドラーとcalculateSum関数の両方から税金を表示します。

calculateSum()また、入力の 1 つが更新されたときに 4 回実行する必要はありません。

更新された fiddleで、より構造化されたソース コードを参照してください。税金と合計を計算するための計算は修正されていません。

于 2012-07-19T00:37:32.580 に答える