我有一个表单,它使用一些带有固定值的复选框输入和一个文本“数字”输入,应根据小时费率计算。
我们的想法是,我们可以选择预设值并显示总数,包括每小时费率的可计费小时数。
<script>
$( document ).ready(function() {
var sum = 0;
var origsum = 0;
var newsum = 0;
var tax = 0.06;
var hourly = 250;
var tothours = 0;
$('.cost').click(function() {
var total = parseInt($('#total').val());
if($(this).is(':checked')) {
sum = total + parseInt($(this).val());
} else {
sum = total - parseInt($(this).val());
}
$('#total').val(sum);
});
$('.tax').click(function() {
var total = parseInt($('#total').val());
if($(this).is(':checked')) {
origsum = sum;
newsum = total + (tax * parseInt(sum));
} else {
newsum = total - (tax * parseInt(sum));
}
$('#total').val(newsum);
});
var prevCount = 0;
var newCount = 0;
$(document).on('keyup mouseup', '.rate', function() {
newCount = parseInt($('.rate').val());
total = parseInt($('#total').val());
if(newCount > prevCount) {
$('.cost').each(function() {
if($(this).is(':checked')) {
sum = total + hourly;
$('#total').val(sum);
return false;
}
else {
$('#total').val($('.rate').val() * hourly);
}
});
}
else {
$('.cost').each(function() {
if($(this).is(':checked')) {
sum = total - hourly;
$('#total').val(sum);
return false;
}
else {
$('#total').val($('.rate').val() * hourly);
}
});
}
prevCount = parseInt($('.rate').val());
});
});
</script>
解释它的最好方法是通过示例,所以我创建了这个包含脚本和html的小提琴:
https://jsfiddle.net/dfkw4ggt/4/
正如你所看到的那样(事先感谢,顺便说一下!),在我们开始添加/点击文本/数字字段之前,它们一切运行良好。
任何建议和/或指示都会非常感激,因为我已经厌倦了我的研究,并希望能让它发挥作用。
答案 0 :(得分:-1)
这是我的看法和我的看法。
我认为你应该有小计,总计和税。 (您仍然可以隐藏最终用户的这些字段,只显示“总计”)
您还可以稍微简化代码,以便更容易找到错误。
看看这个fork of your fiddle,我在那里更改了你的JS代码并添加了子/税/总额。请注意,如果计算中存在错误,现在将更容易找到。
JS:
var taxRate = 0.06;
var hourly = 250;
// we really only need one event listener for the whole page
$(document).on("change", "input", updateTotal);
function updateTotal() {
var runningTotal = 0;
// find all checked cost fields
$(".cost:checked").each(function(){
runningTotal += parseInt($(this).val());
});
var billableAmount = parseInt($(".rate").val()) * hourly;
runningTotal += billableAmount;
$("#subtotal").val(runningTotal);
var tax;
if ($(".tax").prop("checked")) {
tax = runningTotal * taxRate;
} else {
tax = 0;
}
$("#taxAmt").val(tax);
$("#total").val( runningTotal + tax );
}