我有非常简单的表单,客户添加:
价格应按以下方式计算:
应该实时计算。我有一个表格:
<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的初学者。提前谢谢!
答案 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>