我试图添加税收字段。我有这个工作的整数,但我需要能够输入“.5” 我没有线索来解决这个问题,也许是因为isNAN,但我认为这样就好了。
http://jsfiddle.net/thetylercox/eeMva/3/
我当前的代码
$(document).ready(function() {
calculateSum();
$(".txt").keyup(function() {
$(".txt").each(function() {
calculateSum();
});
});
});
$("#tax").keyup(function() {
$('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
);
function calculateSum() {
var sum = 0;
$("#sum").val(sum.toFixed(2));
//iterate through each textboxes and add the values
$(".txt").each(function() {
//add only if the value is number
if (!isNaN(this.value) && this.value.length != 0) {
sum += parseFloat(this.value);
}
});
$("#sum").html(sum.toFixed(2));
var subtotal = document.getElementById("subtotal").value == "";
var subtotal = document.getElementById("subtotal").value = sum;
function getTax(tax) {
var taxFloat = parseFloat(tax)
if (isNaN(taxFloat)) {
return 1;
} else {
return taxFloat;
}
}
var total = getTax($('#tax').val()) * sum;
var total1 = document.getElementById("total1").value = total;
}
谢谢
答案 0 :(得分:3)
试试这个:
$(document).ready(function(){...})
结构中。calculateSum()
内执行所有计算,包括税务。.getelementById(...)
。calculateSum
作为所有用户可输入字段的'keyup'处理程序附加。它应该是这样的:
$(document).ready(function(){
function getTax() {
var taxFloat = parseFloat($("#tax").val());
return isNaN(taxFloat) ? 1 : taxFloat;
}
function calculateSum() {
var sum = 0;
$(".txt").each(function() {
if (this.value && !isNaN(this.value)) {
sum += parseFloat(this.value);
}
});
$("#subtotal").val(sum.toFixed(2));
$("#total1").val((getTax()*sum).toFixed(2));
}
$(".txt, #tax").keyup(calculateSum);
});
<强> DEMO 强>
您可能希望将税务算法更改为更符合逻辑的算法。例如。输入值为5(%)时,乘数应为1.05。
答案 1 :(得分:0)
税收基于百分比。进行以下更改:
$("#tax").keyup(function() {
//$('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
calculateSum();
});
...
function getTax(tax) {
var taxFloat = parseFloat(tax)
if (isNaN(taxFloat)) {
return 1;
} else {
// 1(subtotal) + ?(tax%) -> total = (1 + tax%) * subtotal
return 1 + (taxFloat/100);
}
}
var total = getTax($('#tax').val()) * sum;
// round to 2 decimal digits
total = Math.round(total * Math.pow(10, 2)) / Math.pow(10, 2);
var total1 = document.getElementById("total1").value = total;
因此,对于5%,您输入5表示0.5%,然后输入.5
更新 :(并非真正的更新)当我看到更多答案时,我会重复使用税务字段的逻辑错误。税收是全球的百分比,这意味着问题不仅是关键处理,还包括税收价值的使用方式。
答案 2 :(得分:0)
发现错误:
$("#tax").keyup(function() {
$('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
});
在这里,您使用parseInt
代替parseFloat
解析税,就像在函数getTax
中一样。 parseInt(".5")
给了NaN。插入税后,尝试在.txt
输入中插入值,并在调用calculateSum
函数时起作用。
我无法理解为什么在#tax
字段中按键时使用不同的计算而不是在其他字段中使用普通按键时。只需使用相同的侦听器功能,或者,如果要分割功能,请调用该功能以显示#tax
密钥处理程序和calculateSum
函数的税。
此外,当其中一个输入更新时,无需执行calculateSum()
四次。
在updated fiddle中查看更好的结构化源代码。计算税金和总数的数学计算没有得到纠正。