Jquery简单的实时计算器

时间:2015-08-01 13:06:04

标签: jquery forms

我有非常简单的表单,客户添加:

  1. 文档中的字符数>>>然后计算归一化页面(NP)(Chars / 1800)
  2. 检查他是否愿意支付更快捷的解决方案
  3. 检查他是否想要更正语法
  4. 价格应按以下方式计算:

    • 小于50 NP = 599;每个+10 NP = 99
    • 更快的解决方案= +399
    • 语法校正=每NS 39个(如果更快的解决方案79每个NS)

    应该实时计算。我有一个表格:

    <form action="" id="kalkulackaceny" onsubmit="return false;">
    
        <label>Number of Chars<input type="text" name="kyber-znaky"id="kyber-znaky"/><span id="totalNS"></span></label> 
        <label><input type="checkbox" name="kyber-specha" id="kyber-specha" val="yes"/> Spěchá to?</label>
        <label><input type="checkbox"  name="kyber-korektura" id="kyber-korektura" val="yes"//> Korektura?</label>
    
    </form>
    <div id="totalPrice"></div>
    

    并没有更新jquery:

    var cenaStd = 599;
    var cenaDeset = 99;
    var cenaSpechato = 399;
    var cenaKorektura = 39;
    var cenaKorekturaSpechato = 79;
    
    $(document).ready(function(){
    
        //update znaky
        $('#kyber-znaky').keyup(function(){
            var ns = $('#kyber-znaky').val();
            ns = Math.round(ns/1800);
    
            if (ns < 50){
                finalPrice = cenaStd;
            }
            else {
                finalPrice = cenaStd;
                x = ns - 49;
                while (x > 0){
                    finalPrice += cenaDeset;
                    x -= 10;
                }
            }
    
            $('#totalNS').text(" (celkem " +ns+ " NS)");
            //$('#totalPrice').text("Celková cena za zakázku " +finalPrice);
    
        });
    
        $('#kyber-specha').change(function() {        
            if($('#kyber-specha:checked').val() == 'yes'){
                finalPrice += cenaSpechato;
            }               
        });
        $('#kyber-korektura').change(function() {
        if($('#kyber-specha:checked').val() == 'yes'){    
            if($('#kyber-specha:checked').val() == 'yes'){
                finalPrice += ns*cenaKorekturaSpechato;
            }
            else {
                finalPrice += ns*cenaKorektura;
            }
        }
        });
    
        $('#kalkulackaceny').on('change',function(){
            $('#totalPrice').text("Celková cena za zakázku " +finalPrice);
        });
    
    });
    

    我已将它添加到js小提琴:here

    有人可以帮我解决吗?我是jquery的初学者。提前谢谢!

1 个答案:

答案 0 :(得分:2)

我已将所有caluclations移动到单独的函数:calcPrice。 我还将Math.round(ns / 1800)更改为Math.ceil(ns / 1800)。如果你真的想从计算中排除半填充的页面,那就改回来。

var cenaStd = 599;
var cenaDeset = 99;
var cenaSpechato = 399;
var cenaKorektura = 39;
var cenaKorekturaSpechato = 79;

var calcPrice = function(sett) {
  var pages = sett.pages >= 0 ? sett.pages : 0,
    correct = sett.correct,
    fast = sett.fast,
    totalPrice,
    tensOver50 = Math.ceil(Math.max(0, pages - 49) / 10);

  totalPrice = cenaStd + tensOver50 * cenaDeset;
  if (fast) {
    totalPrice += cenaSpechato;
  }
  if (correct) {
    totalPrice += pages * (fast ? cenaKorekturaSpechato : cenaKorektura)
  }
  return totalPrice;
}


$(document).ready(function() {

  var paramsChanged = function() {
    var ns = parseInt($('#kyber-znaky').val());
    ns = Math.ceil(ns / 1800);

    var settings = {
      fast: $('#kyber-specha:checked').length === 1,
      correct: $('#kyber-korektura:checked').length === 1,
      pages: ns
    };
    var finalPrice = calcPrice(settings);

    //update display:
    $('#totalNS').text(" (celkem " + ns + " NS)");
    $('#totalPrice').text("Celková cena za zakázku " + finalPrice);
  }

  //update znaky
  $('#kyber-znaky').keyup(paramsChanged);
  $('#kyber-specha, #kyber-korektura').change(paramsChanged);

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" id="kalkulackaceny" onsubmit="return false;">

  <label>Number of Chars
    <input type="text" name="kyber-znaky" id="kyber-znaky" /><span id="totalNS"></span>
  </label>
  <br />
  <label>
    <input type="checkbox" name="kyber-specha" id="kyber-specha" val="yes" />Spěchá to?</label>
  <label>
    <input type="checkbox" name="kyber-korektura" id="kyber-korektura" val="yes" //>Korektura?</label>

</form>
<div id="totalPrice"></div>