数字计算未正确执行

时间:2018-01-15 19:20:46

标签: javascript jquery

我有一个表单,它使用一些带有固定值的复选框输入和一个文本“数字”输入,应根据小时费率计算。

我们的想法是,我们可以选择预设值并显示总数,包括每小时费率的可计费小时数。

<script>
$( document ).ready(function() {
    var sum = 0;
    var origsum = 0;
    var newsum = 0;
    var tax = 0.06;
    var hourly = 250;
    var tothours = 0;
    $('.cost').click(function() {
        var total = parseInt($('#total').val());
        if($(this).is(':checked')) {
            sum = total + parseInt($(this).val());
        } else {
            sum = total - parseInt($(this).val());
        }

        $('#total').val(sum);
    });
        $('.tax').click(function() {
            var total = parseInt($('#total').val());
            if($(this).is(':checked')) {
                origsum = sum;
                newsum = total + (tax * parseInt(sum));
            } else {
                newsum = total - (tax * parseInt(sum));             
            }
            $('#total').val(newsum);
    });

    var prevCount = 0;
    var newCount = 0;
    $(document).on('keyup mouseup', '.rate', function() {
        newCount = parseInt($('.rate').val());
        total = parseInt($('#total').val());
        if(newCount > prevCount) {
            $('.cost').each(function() {
                if($(this).is(':checked')) {
                    sum = total + hourly;
                    $('#total').val(sum);
                    return false;
                }
                else {
                    $('#total').val($('.rate').val() * hourly);
                }
            });
        }
        else {
            $('.cost').each(function() {
                if($(this).is(':checked')) {
                    sum = total - hourly;
                    $('#total').val(sum);
                    return false;
                }
                else {
                    $('#total').val($('.rate').val() * hourly);
                }
            }); 
        }
        prevCount = parseInt($('.rate').val());
    });
});

</script>

解释它的最好方法是通过示例,所以我创建了这个包含脚本和html的小提琴:

https://jsfiddle.net/dfkw4ggt/4/

正如你所看到的那样(事先感谢,顺便说一下!),在我们开始添加/点击文本/数字字段之前,它们一切运行良好。

任何建议和/或指示都会非常感激,因为我已经厌倦了我的研究,并希望能让它发挥作用。

1 个答案:

答案 0 :(得分:-1)

这是我的看法和我的看法。

我认为你应该有小计,总计和税。 (您仍然可以隐藏最终用户的这些字段,只显示“总计”)

您还可以稍微简化代码,以便更容易找到错误。

看看这个fork of your fiddle,我在那里更改了你的JS代码并添加了子/税/总额。请注意,如果计算中存在错误,现在将更容易找到。

JS:

var taxRate = 0.06;
var hourly = 250;

// we really only need one event listener for the whole page
$(document).on("change", "input", updateTotal); 

function updateTotal() {
    var runningTotal = 0;

    // find all checked cost fields
    $(".cost:checked").each(function(){
      runningTotal += parseInt($(this).val());    
    });  

    var billableAmount = parseInt($(".rate").val()) * hourly;

    runningTotal += billableAmount;

    $("#subtotal").val(runningTotal);

    var tax;
    if ($(".tax").prop("checked")) {
      tax = runningTotal * taxRate;
    } else {
        tax = 0;
    }

    $("#taxAmt").val(tax);

    $("#total").val( runningTotal + tax );

}