Javascript运行总计不断添加

时间:2012-09-06 14:37:50

标签: javascript jquery running-total

昨天我得到了很好的帮助解决了一个$ NaN问题所以希望我能从昨天开始在我的代码中得到另一个答案,小计是现在在每一行的末尾添加总计并显示一个值,这样就好了,但是随时我输入已售出的金额,然后再更改它再次添加的价值,因此,如果我将数量设置为2且每个50美元,则订单项的总金额为100美元,小计则反映,但如果我将数量更改为1 item正确地变成$ 50,但是小计重新添加并变成了150美元,我对JS不够精明,看看我做错了什么......

$(document).ready(function() {
var subtotal = 0;
var stantot = 0;
var showtot = 0;
$("input").keyup(function() {
    for (var i = 0; i <= 30; i++) {
        var unitp = parseFloat($("#unitp" + i).val()) || 0;
        var casep = parseFloat($("#casep" + i).val()) || 0;
        var units = parseFloat($("#units" + i).val()) || 0;
        var cases = parseFloat($("#cases" + i).val()) || 0;
        var st_disc = parseFloat($("#st_disc").val()) || 0;
        var sh_disc = parseFloat($("#sh_disc").val()) || 0;

        var unitr = (unitp * units);
        var caser = (casep * cases);
        var result = (unitr + caser);
        var st_disc_fix = (st_disc / 100);
        var sh_disc_fix = (sh_disc / 100);
        var st_disc_solo = (st_disc_fix * result);
        var sh_disc_solo = (sh_disc_fix * result);
        var disc_total = (st_disc_fix + sh_disc_fix);
        var disc_whole = (disc_total * result);

        var disc = (result - disc_whole);
        var st_disc_tot = (result - disc_whole);
        var sh_disc_tot = (result - disc_whole);

        $("#line" + i).val(result.toFixed(2));
        $("#disc" + i).val(disc.toFixed(2));
        subtotal += parseFloat((unitp * units) + (casep * cases));
        stantot += parseFloat(st_disc_tot);
        showtot += parseFloat(sh_disc_tot);
    }
    $("#totretail").val(subtotal.toFixed(2));
    $("#standiscount").val(stantot.toFixed(2));
    $("#showdiscount").val(showtot.toFixed(2));

    var totship = ($("#totship").val() * 1);
    var tottax = ($("#tottax").val() * 1);

    var finaltotal = (subtotal + stantot + showtot + totship + tottax);
    $("#total").val(finaltotal.toFixed(2));

    });
});

3 个答案:

答案 0 :(得分:2)

var subtotal = 0;侦听器中移动input,以便每次都重新计算小计:

$(document).ready(function() {
  $("input").keyup(function() {
    var subtotal = 0;
    var stantot = 0;
    var showtot = 0;
    for (var i = 0; i <= 30; i++) {

...

否则总数会继续增长,stantotshowtot的工作原因是因为它们是由=而不是+=的变量设置的。

我也将其他变量移到那里,只是因为它更好。

答案 1 :(得分:1)

您的问题是,您从未重置小计。它每次都会继续添加到上一个小计。您需要做的是在重新计算

之前将其重置为零

答案 2 :(得分:0)

我认为你的问题在于以下几点:

var totship = ($("#totship").val() * 1);
var tottax = ($("#tottax").val() * 1);

jQuery中的.val()方法倾向于返回字符串。但是,如果将String乘以一个数字,则得到NaN。您应该强制值为数字。这似乎是您尝试使用* 1进行的操作,但这不会起作用。试试这个:

var totship = +$("#totship").val();
var tottax = +$("#tottax").val();

或者如果你的事情清晰,你可以这样做:

var totship = Number($("#totship").val());
var tottax = Number($("#tottax").val());

或者

var totship = parseInt($("#totship").val(), 10);
var tottax = parseInt($("#tottax").val(), 10);

选择。