【问题标题】:jQuery addition function giving me NaNjQuery添加功能给我NaN
【发布时间】:2013-07-02 11:19:50
【问题描述】:

我正在使用以下函数将我的所有行总计加在一起。每个总数都是十进制数,例如 23.45 。当用户在任何文本输入框中输入任何数量时,它应该触发该功能,但我现在得到的全部是 NaN,它是谁,为什么她要弄乱我的脚本?

顺便说一下,每个 linetotals 都是一个 span,一旦在 qty 文本框中输入了数量,就会填充 line total 计算。

所以基本上,用户出现,从第一行下拉菜单中选择一个价格,比如说 20.00 ,然后他们在文本框中输入数量 qty,比如说 2,然后 jQuery 将 qty 乘以 priceeach 并输出到跨度为 id linetotal1。我想要做的是将所有 linetotals 加在一起以获得总计,但是如果他们没有在第 2 行输入任何内容,linetotal2, 3, 4, 5 将是空的。

  <script>
   $(document).ready(function () {
      $('input').on('keyup', function () {
           linetotal1 =  $('#linetotal1').text(),
            linetotal2 =  $('#linetotal2').text(),
             linetotal3 =  $('#linetotal3').text(),
              linetotal4 =  $('#linetotal4').text(),
               linetotal5 =  $('#linetotal5').text(),
    grandtotal = parseFloat(linetotal1) + parseFloat(linetotal2) + parseFloat(linetotal3) +     parseFloat(linetotal4) + parseFloat(linetotal5);
    $('#grandtotal').text(grandtotal);
       });  });
   </script>

【问题讨论】:

  • 如果任何parseFloat 调用返回NaN,结果将是NaN。如果输入不能转换为数字,则返回该值。例如。 parseFloat('')返回NaN.
  • 如何为每个添加一个 if empty ,这样它就会忽略它?
  • 哈哈哈......“谁是 NaN”......史诗......不管怎样,你说的是文本框吧?那么你必须使用$(...).val() 而不是text()
  • linetotal 是通过将其他两个元素相加而生成的内容的跨度。我所做的都是将每个跨度的内容添加在一起,但在计算该行之前,一些跨度将是空的。
  • linetotal1 = parseFloat($('#linetotal1').text()) || 0,试过了吗?

标签: dom jquery


【解决方案1】:

你可以从 1-5 循环,如果它是一个空白字符串,则将值默认为 0

var rawValue, grandtotal = 0;

for(var i=1; i<6; i++)
{
     rawValue = $.trim($('#linetotal' + i).text());
     if(rawValue == '') rawValue = 0;
     grandtotal += parseFloat(rawValue);
}

$('#grandtotal').text(grandtotal);

jsFiddle Demo


如果您想用 jQuery 做一些更有趣的事情,您可以根据以 linetotal 开头的 ID 选择每个跨度。如果您添加更多跨度,这将起作用,与for 循环一样,您必须更新计数。如果跨度都有一个共同的类会更好,您可以使用它来轻松选择它们。

var rawValue, grandtotal = 0;

$('span[id^="linetotal"]').each(function(i, elem){
     rawValue = $.trim($(this).text());
     if(rawValue == '') rawValue = 0;
     grandtotal += parseFloat(rawValue);
});

$('#grandtotal').text(grandtotal);

jsFiddle Demo

【讨论】:

  • $(document).ready(function () { $('input').on('keyup', function () { var rawValue, grandtotal = 0; for(var i=1; i
  • 啊,我在grandtotal 中有一个大写的 T,我已经编辑修复。还添加了演示。
  • 哇,太棒了,谢谢,第二个效果很好! :)
【解决方案2】:

您应该循环执行此操作,我之前已为我的客户执行此操作,检查我的代码是否对您有帮助

    var disValue = new Array();
    var this_size = document.getElementsByName("myVal").length;
    sum = 0;
    for (i=0; i<this_size; i++)
    {
          disValue[i] = document.getElementsByName("myVal")[i].value;
    }

    for (i=0; i<this_size; i++)
    {
        sum = parseFloat(sum)+ parseFloat(disValue[i]);
    }

 if (sum != 0) {
document.getElementById("disc_test").innerHTML="<?php echo $this->__('You are saving') ?> "+sum +" <?php echo $this->__('on this order') ?>!";
 }

忽略php标签:)

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多