JavaScript计算返回NaN

时间:2017-01-07 13:54:15

标签: javascript jquery arrays

我想找到在数组中传递字段值的总和。如果该字段是折扣,则执行减去其他加号。出于某种原因,我得到了南。

这是我的脚本代码

<script>

    var partial_cost = $('#bill_amount:disabled').val();
    var fine = +$('#fine').val();
    var discount = +$('#discount').val();
    var other_cost = +$('#other_cost').val();
    var total_cost = +$('#total').val();

    var chargeAble = [
    partial_cost,
    fine,
    discount,
    other_cost
    ];

    $.each(chargeAble, function (chargeIndex, charge) {
        charge.blur(function () {
            var amount = 0;
            for(charge in chargeAble)
                if(chargeAble[charge].attr('id') == 'discount')
                    amount -= (chargeAble[charge].val());
                else
                    amount += (chargeAble[charge].val());

                total_cost.val(amount);
            });
    });

</script>

4 个答案:

答案 0 :(得分:0)

我可以看到这样的东西:

var fine = +$('#fine');

jQuery()方法返回jQuery个对象,而不是数字甚至字符串。因此,强制数字强制转换将返回NaN

您需要首先抓取内部文本,然后解析它的数字。如何做到这取决于HTML的结构,但一般来说:

  • 在表单字段中,您通常可以使用.val()
  • 在大多数其他代码中,您可以使用.text()

答案 1 :(得分:0)

代码使用.each()和for-in循环的组合......奇怪的是来自blur()函数的回调?它可以像这样简化:

var amount = 0;
$('#bill_amount:disabled, #fine, #discount, #other_cost')
  .blur()
  .each(function() {
    var sign = this.id === 'discount' ? -1 : 1;
    amount += parseFloat($(this).val()) * sign;
  });
$('#total').val(amount);

更新

哦,你希望总计更新模糊...试试这段代码:

var $values = $('#bill_amount:disabled, #fine, #discount, #other_cost');
$values.on('blur', function() {
  var amount = 0;
  $values.each(function(){
    var sign = this.id === 'discount' ? -1 : 1;
    amount += parseFloat($(this).val()) * sign;
  });
  $('#total').val(amount);
});

答案 2 :(得分:0)

确保所有值都被JavaScript解释为数字。否则它将尝试从字符串计算一些奇怪的结果,这可能被解释为除了十进制数字(十六进制,八进制,......)之外的其他内容。

答案 3 :(得分:0)

你的数组包含数字,你就像它们是字符串一样

var chargeAble = [  //this holds values
    partial_cost,
    fine,
    discount,
    other_cost
];

并在循环中使用它作为id ???

chargeAble[charge].attr('id')