简体   繁体   English

总价计算器逻辑难度

[英]Total price calculator logic difficulty

I have two number inputs, what I want to do is to get dynamially the total price. 我有两个数字输入,我想做的是动态获得总价。 The problem is that when I decrease the number its still adding and doesn't work correctly. 问题是,当我减少数量时,它仍然添加并且无法正常工作。 Actually my brain cannot imagine any way to code it correctly. 实际上我的大脑无法想象任何正确编码的方法。 Could someone give me any clue please? 有人能给我任何线索吗?

<input type="number" name="open" id='open' min="0" max="20"> 
<input type="number" name="vip"  id='vip' min="0" max="20"> 
<p> Total Price: <span id='doZaplaty'>0</span> EURO</p>
<script>
  var vipPrice = 290;
  var openPrice = 80;
  var totalPrice = 0
  $('#open').on("change", function() {
    totalPrice = totalPrice + ($("#open").val() * openPrice);
    $("#doZaplaty").html(totalPrice);
  });

  $('#vip').on("change", function() {
    totalPrice = totalPrice + ($("#vip").val() * vipPrice);
    $("#doZaplaty").html(totalPrice);
  });
</script>

Because totalPrice = totalPrice + ($("#open").val() * openPrice); 因为totalPrice = totalPrice + ($("#open").val() * openPrice); will add up previous result, as I commented. 正如我评论的那样,会加上以前的结果。

However, you have 2 different total to take into account, so it's not easy to keep the state with only one total, because you need to subtract the previous result ,or calculate the change from previous value. 但是,您需要考虑两种不同的总数,因此要保持状态只有一个总数并不容易,因为您需要减去之前的结果,或者计算之前值的变化。

Instead, you can have 2 different total, like openTotal for result on #open and vipTotal on result for #vip , then you can use openTotal = ($("#open").val() * openPrice); 相反,你可以有两个不同的总数,比如openTotal for #openvipTotal result for #vip ,那么你可以使用openTotal = ($("#open").val() * openPrice); to get the current state. 获得当前状态。 And when you need to output the result, use $("#doZaplaty").html(openTotal + vipTotal); 当你需要输出结果时,使用$("#doZaplaty").html(openTotal + vipTotal); to show the final total. 显示最终总数。

 var vipPrice = 290; var openPrice = 80; var openTotal = 0; var vipTotal = 0; $('#open').on("change", function() { // As the totals are separated, we just need to get its current values computed. openTotal = ($("#open").val() * openPrice); $("#doZaplaty").html(openTotal + vipTotal); }); $('#vip').on("change", function() { vipTotal = ($("#vip").val() * vipPrice); $("#doZaplaty").html(openTotal + vipTotal); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p> Total Price: <span id='doZaplaty'>0</span> EURO</p> <input type="number" name="open" id='open' min="0" max="20"> <input type="number" name="vip" id='vip' min="0" max="20"> 

Because you always add to totalPrice. 因为您总是添加到totalPrice。 Try this instead (untested): 试试这个(未经测试):

    <script>
        var totalPrice = 0
        function GetTotalPrice(vipNum,openNum){
            var vipPrice = 290;
            var openPrice = 80;
            var total = vipNum * vipPrice + openNum * openPrice;
            return total;
        }

        $('#open').on("change", function(){
            totalPrice = GetTotalPrice($("#vip").val(),$("#open").val());
            $("#doZaplaty").html(totalPrice);
        });

        $('#vip').on("change", function(){
            totalPrice = GetTotalPrice($("#vip").val(),$("#open").val());
            $("#doZaplaty").html(totalPrice);
        });
    </script>

Please tyr by this simple way 请通过这种简单的方式

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Total Price: <span id='doZaplaty'>0</span> EURO</p>
<input type="number" name="open" id='open' min="0" max="20"> 
<input type="number" name="vip"  id='vip' min="0" max="20"> 

Set 2 hidden fields to store temp calculation value 设置2个隐藏字段以存储临时计算值

<input type="hidden" name="totalPriceopenTemp" id='totalPriceopenTemp' value="0"> 
<input type="hidden" name="totalPricevipTemp"  id='totalPricevipTemp' value="0"> 

<p> Total Price: <span id='doZaplaty'>0</span> EURO</p>
<script>
  var vipPrice = 290;
  var openPrice = 80;
  var totalPrice = 0;
  var totalPriceopenTemp = 0;
  var totalPricevipTemp = 0;

  $('#open').on("change", function() {
    totalPriceopenTemp = ($("#open").val() * openPrice);
    $("#totalPriceopenTemp").val(totalPriceopenTemp);
    totalPrice = parseInt($("#totalPriceopenTemp").val())+parseInt($("#totalPricevipTemp").val());
    $("#doZaplaty").html(totalPrice);
  });

  $('#vip').on("change", function() {
    totalPricevipTemp = ($("#vip").val() * vipPrice);
    $("#totalPricevipTemp").val(totalPricevipTemp);
    totalPrice = parseInt($("#totalPriceopenTemp").val())+parseInt($("#totalPricevipTemp").val());
    $("#doZaplaty").html(totalPrice);
  });
</script>

I think It will work for you 我认为这对你有用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM