每次客户输入数量时,我都会尝试显示小计。但是,当我循环输入时,我得到一个NaN
作为总数。我相信这可能是我在脚本中声明subtotal
变量的方式,但我之前没有遇到过这个:
$('.item-qty input').bind('keyup', function(){
var subtotal = 0.0;
$('.item-qty input').each(function(){
var class = $(this).attr('id');
var qty = $(this).val();
var price = $('.'+class).html();
price = parseFloat(price);
qty = parseInt(qty);
subtotal = subtotal + (price * qty);
});
$('.subtotal input').val(subtotal);
});
答案 0 :(得分:23)
parseFloat
和parseInt
可以返回NaN
。
所以,我会像这样保护它(NaN
是 falsy 值):
price = parseFloat(price) || 0;
qty = parseInt(qty, 10) || 0;
对值为NaN
的数字进行算术运算几乎总是导致NaN
NaN + 5
将导致NaN
。)这意味着,如果只有一<输入的/ em>无法由parseFloat
或parseInt
解析,您当前的代码最终会计算小计的NaN
。
评论中已经提到过(主要是Felix),但我认为值得强调,因为这些是重要的问题:
radix
参数传递给parseInt
函数; class
用于变量名称:它是保留(未使用但保留)的关键字;