我一直收到 Nan
,我的代码中是否缺少某些部分?我拥有的值是纯 float ,例如 79.00、12.00 等。此外,我以前写过这段代码的长版本,我得到了正确的答案,但是当我将它更改为这个较短的版本时,它给了我一个NaN
代码的长版本
function tblcheckboxes(){
var a, b, c ... v = 0;
if ($('#tcbx1').is(":checked")) {
a = parseFloat($("#tcbx1").val(), 10);
}
if ($('#tcbx2').is(":checked")) {
b = parseFloat($("#tcbx2").val(), 10);
}
if ($('#tcbx3').is(":checked")) {
c = parseFloat($("#tcbx3").val(), 10);
}
...
...
...
if ($('#tcbx23').is(":checked")) {
v = parseFloat($("#tcbx23").val(), 10);
}
var total = a + b + c ... + v;
$('.txt7').val(total.toFixed(2));
}
$(document).ready(function(){
$('#tcbx1').click(function(){
tblcheckboxes();
});
$('#tcbx2').click(function(){
tblcheckboxes();
});
$('#tcbx3').click(function(){
tblcheckboxes();
});
...
...
...
$('#tcbx23').click(function(){
tblcheckboxes();
});
});
当前代码
function tblcheckboxes() {
var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v = 0;
var vars = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v]; // store in an array for easier access
var total = 0; // initialize total so it can be added while looping through the elements
for(var x = 1; x <= 23; x++) {
if($("#tcbx" + x).is(":checked")) {
vars[x - 1] = parseFloat($("#tcbx" + x).val(), 10);
}
total = parseFloat($(total).val(), 10) + vars[x - 1];
}
$(".txt7").val(total.toFixed(2));
}
$(document).ready(function() {
for(var i = 1; i <= 23; i++) {
$("#tcbx" + i).click(function() {
tblcheckboxes();
grandtotal();
});
}
});
$(":checkbox").on("change", function() {
//change input #grandtotal value according check/uncheck checkboxes
$(".txt7").val(function() {
//declare a variable to keep the sum of the values
var sum = 0;
//using an iterator find and sum the values of checked checkboxes
$(":checkbox:checked").each(function() {
sum = parseFloat($(sum).val(), 10) + parseFloat(~~$(this).val(), 10);
});
return sum;
});
});
//here change the value according on checked checkboxes on DOM ready event
$(".txt7").val(function() {
var sum = 0;
$(":checkbox:checked").each(function() {
sum = parseFloat($(sum).val(), 10) + parseFloat(~~$(this).val(), 10);
});
return sum;
});
最佳答案
var a, b, c, ..., v = 0;
不会初始化所有变量。它将 v
初始化为 0
,但所有其他变量都未定义。这需要是:
var a = 0, b = 0, c = 0, ..., v = 0;
或者你可以这样做:
var a, b, c, ..., v;
a = b = c = ... v = 0;
我建议您重新考虑对所有内容使用单独的变量,并使用数组。然后,您可以使用循环遍历所有输入,并将相应的元素设置为 0
或输入值。
关于javascript - 值是 float ,但仍然是 `NaN`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27852767/