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在这里,您使用而不是解析税款parseFloat,就像在函数中所做的那样getTaxparseInt(".5")给出 NaN。.txt在插入税后尝试在输入中插入值,它会在调用calculateSum函数时起作用。

我不明白为什么在字段中按下键时会使用与#tax其他字段中的正常按键不同的计算。只需使用相同的侦听器函数,或者,如果您想划分功能,请调用该函数以显示来自#taxkeyhandler 和calculateSum函数的税款。

此外,当其中一个输入被更新时,无需执行calculateSum()四次。

在更新的 fiddle中查看更好的结构化源代码。计算税收和总额的数学没有更正。

于 2012-07-19T00:37:32.580 回答