我试图在每次客户输入数量时显示小计。但是,当我循环输入时,我得到一个 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);
});
最佳答案
parseFloat
和 parseInt
如果字符串的第一个字符不能转换为数字,可以返回 NaN
。
所以,我会像这样防止它(NaN
是一个 falsy 值):
price = parseFloat(price) || 0;
qty = parseInt(qty, 10) || 0;
对值为 NaN
的数字进行算术运算几乎总是得到 NaN
(NaN + 5
将得到 NaN
。)这意味着,如果只有 一个 输入不能被 parseFloat
或 parseInt
解析,您当前的代码最终将计算 NaN
为小计。
它已经在评论中提到(主要是 Felix),但我认为值得强调,因为这些是重要的问题:
- 始终将
radix
参数传递给parseInt
函数; - 不要对变量名使用
class
:它是保留的(未使用,但已保留)关键字; - 不要指望小计是 perfectly accurate除非你用美分计算。
关于Javascript 返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264752/