javascript - 值是 float ,但仍然是 `NaN`

标签 javascript jquery html

我一直收到 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;
});

jsFiddle

最佳答案

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/

相关文章:

javascript - setAttribute() 无法按我预期的方式工作

javascript - 如何使用 momentjs 从数组中找到最接近当前时间的时间?

javascript - 使用 jQuery 单击缩略图来更改主图像的 src

javascript - 使用正则表达式从 HTML 标签属性获取字符串 - JavaScript

CSS:清除 3 列 Div 布局后的内容

javascript - toTitleCase 函数无法正常工作

javascript - 如何确定哪个 DOM 元素与 Knockout 可观察数组元素相对应?

javascript - Charts.js 动态报价

javascript - 无法对齐作为 css 圆圈的导航列表元素的基线

CSS、 Bootstrap 、HTML5