0

昨日、$ NaNの問題を解決するのに大いに役立ちました。昨日からコードで別の回答が得られることを期待して、小計は各行の最後に合計を追加し、値を表示しているので、それは良いことですが、金額を入力するときはいつでも販売してから、その値を再度変更すると、数量を2に設定して1つあたり$ 50に設定すると、ラインアイテムの合計は$ 100になり、小計が反映されますが、数量を1に変更すると、ラインアイテムは$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));

    });
});
4

3 に答える 3

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変数から設定されて=いないため+=です。

他の変数もそこに移動しました。それが優れているからです。

于 2012-09-06T14:47:06.013 に答える
1

あなたの問題は、小計をリセットしないことです。毎回前の小計に追加し続けます。あなたがする必要があるのは、再計算する前にどこかでゼロにリセットすることです

于 2012-09-06T14:49:03.130 に答える
0

私はあなたの問題がこれらの行にあると思います:

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

jQueryの.val()メソッドは、文字列を返す傾向があります。ただし、文字列に数値を掛けると、が得られ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);

好きなものを選んでください。

于 2012-09-06T14:43:21.650 に答える