2014-09-11 54 views
-1

号我试图从一个输入数组值求和,但和它保持返回NAN求和jQuery中返回NAN

var sum = 0 //i have also tried parse(0,10); 
$(qty_name).each(function(){ 
    var aValue = $(this).val(); //i have tried parseInt($(this).val(), 10) 
    sum += aValue; //i have tried sum = parseInt(sum) + parseInt(aValue) 
}); 
alert(sum); 

我不断收到NaN的。我来自一个PHP背景,所以我从来没有处理类型铸造。请问我错过了什么?

+0

你能告诉'qty_name' – Anton 2014-09-11 12:13:17

+0

你可以添加脚本和HTML的休息吗? – TeeDeJee 2014-09-11 12:13:40

+0

'var aValue + = $(this).val()':'aValue'的初始值将是未定义的,所以递增将不会起任何作用。 – Richard 2014-09-11 12:14:44

回答

2

那是因为你的其他qty_name没有完美的整数值。这对于这样的值导致NAN。你需要分析的数值为int(或浮动)做任何数学calucations:

var sum = 0; 
$(qty_name).each(function(){ 
    sum += parseInt($(this).val()) || 0; 
}); 
alert(sum); 
+0

工作!谢谢 – 2014-09-11 12:30:48

+0

嘿,请你能解释一下,对我来说 – 2014-09-11 12:33:15

+0

正如我已经提到的那样,parseInt无法转换那些不完美的整数,导致NAN的值。当解析的结果是NAN时,这里使用的值是否为0。 – 2014-09-11 12:45:44

0

这样做:

var sum = 0; 
$(qty_name).each(function(){ 
    sum += +($(this).value()); //+ converts to a number 
}); 
alert(sum); 

你在哪里定义变量,你不应该使用+=运营商用户在做错误的var aValue += $(this).val()。你应该做的是这样的:

var sum = 0 //i have also tried parse(0,10); 
$(qty_name).each(function(){ 
    var aValue = $(this).val(); //removed + sign before = sign 
    sum += aValue; //i have tried sum = parseInt(sum) + parseInt(aValue) 
}); 
alert(sum); 
+0

我只是试了一下,这是连接不总结 – 2014-09-11 12:24:04

0

您需要使用parseIntparseFloat,但这里使用的是var aValue += $(this).val();安勤将不会被初始化。直接增加价值sum

var sum = 0; 
$(qty_name).each(function(){ 
    sum += parseInt($(this).val(), 10)||0; 
}); 
alert(sum); 
+1

他说他在你引用的代码的评论中尝试parseInt。 :)。其实它是一个更好的做法,使用第二个参数转换为十进制。像parseInt(val,10)。 – mithunsatheesh 2014-09-11 12:16:03

+0

@ mithunsatheesh,是的我同意你使用'parseInt(val,10)'是更好的练习 – 2014-09-11 12:23:21

+0

我刚试过这个,它返回NaN – 2014-09-11 12:28:34

0

尝试使用isNaNparseInt如图所示:

var sum = 0; 
$(qty_name).each(function(){ 
    sum += (isNaN($(this).val()) ? 0 : parseInt($(this).val(),10)); 
}); 
alert(sum) 
+0

不,返回NaN – 2014-09-11 12:36:00

+0

@ ObiIk..not possible ...使用isNaN()为此目的 – 2014-09-11 12:38:04

0

据我从你的问题理解,尽量避免添加NaN,则使用jQuery的内置方法.isNumeric()为像(和undefined当然+=不会有好下场):

var sum = 0; 
$(qty_name).each(function(){ 
    var aValue = parseInt($(this).val(), 10); 
    if(!$.isNumeric(aValue)) return; 
    sum += aValue; 
}); 
alert(sum);