添加复选框总和而不是添加

时间:2019-03-30 11:47:57

标签: javascript

我要在表单中尝试做的是,当用户单击某些复选框时,该值(以浮点形式)加起来是一个总和,但是我的代码现在是追加而不是添加。 / p>

这是我的代码:

<script>
$(document).ready(function() {
    function updateSum() {
      var total = "0.00";
      $(".sum:checked").each(function(i, n) { total += parseFloat($(n).val()).toFixed(2); })
      $("#total").val(total);
    }
    // run the update on every checkbox change and on startup
    $("input.sum").change(updateSum);
    updateSum();
})
</script>

当我选中多个框时,我得到: 1.002.003.00 而不是: 6.00

我的代码看起来正确,我看不到我错过的内容。任何对此问题的建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

  1. 将total ='0.00'更改为数字(total = 0.00)而不是字符串。
  2. toFixed返回字符串而不是数字

let x = 1.22

console.log(typeof (1.22).toFixed(2))

答案 1 :(得分:1)

让我们看一个简单的示例,toFixed()的行为以及在将原始值作为字符串的情况下如何在JavaScript中添加浮点数:

(function() {
   var total = '0.00';

   for (var i = 0; i < 5; i++) {
      total = (parseFloat(total) + parseFloat(4.3)).toFixed(2);
   }

   console.log('total', {
      total: total,
      typeOfTotal: typeof(total)
   });
})();

根据以下示例,您可以看到toFixed()返回了一个字符串,因此我建议将您的代码修改为以下内容,以便正确添加数字:

$(document).ready(function() {
    function updateSum() {
      var total = "0.00";
      $(".sum:checked").each(function(i, n) {
         let sum = parseFloat(total) + parseFloat($(n).val());
         total = sum.toFixed(2);
      });
      $("#total").val(total);
    }
    // run the update on every checkbox change and on startup
    $("input.sum").change(updateSum);
    updateSum();
});

您可以在此处进一步了解Number.prototype.toFixed()parseFloat()