2013-03-19 157 views
3
$('span#pricetotal').text(function() { 
    var val = 0; 
    for (var i = 0; i < 15; i++) { 
     val += parseInt($('span#itemtotal_' + i).text()); 
    }; 
    return val; 
}); 

我有15x <span>我在那里用jQuery text()函数的价格。在上面的代码中,我想将它们的总和计入span#pricetotaljQuery .text()返回NaN,为什么?

然而,发生的是,代替(20+20=40),元素显示2020。在上面的代码中,我使用parseInt - 这会返回NaN

我在做什么错?谢谢。

编辑:元素的HTML看起来像这样:

<span id="itemtotal_0">16</span> 
+7

显示你的HTML是这种类型的问题很重要。 – 2013-03-19 19:46:50

+2

最有可能的'parseInt($('span#itemtotal_'+ i).text())'在某个点返回NAN。 – 2013-03-19 19:46:53

+1

parseInt函数无法解析由$返回的值( '跨度#itemtotal_' + I)的.text()为一个整数。什么是价值? – 2013-03-19 19:46:53

回答

2
$('#pricetotal').text(function() { 
    var val = 0; 
    for (var i = 0; i < 14; i++) {   
     var value = $.trim($('span#itemtotal_' + i).text()); 
     val +=parseInt($.isNumeric(value) ? value : 0); 
    }; 
    return val; 
}); 

DEMO

注:

这是安全的,如果你的跨度包含任何spacenon-numeric数据。在演示中,您会发现一个span有字母a

+0

这是一个诀窍,但我真的没有在我以前的代码中看到任何空格。非常感谢你。 – user1848605 2013-03-19 20:06:54

+0

@ user1848605欢迎 – thecodeparadox 2013-03-19 20:14:31

0

使用条件来检查..

试试这个

$('span#pricetotal').text(function() { 
    var val = 0; 
    for (var i = 0; i < 15; i++) { 
     if($('span#itemtotal_' + i).text() != ""){ // <-- check if not empty since empty gives Nan when used pareseInt 
     val += parseInt($('span#itemtotal_' + i).text()); 

     } 
    }; 
return val; 
}); 

OR

for (var i = 0; i < 15; i++) { 
    val += parseInt($('span#itemtotal_' + i).text()) || 0; 
} 
0

它的工作原理完美: http://jsfiddle.net/jDnVy/5/

$('span#pricetotal').text(function() { 
    var val = 0; 
    for (var i = 0; i < 15; i++) {   
     val +=parseInt($('span#itemtotal_' + i).text()); 

    }; 
    return val; 
}); 

请检查您的itemtotal跨度始于itemtotal_0,不itemtotal_1

可能是它试图找到span#itemtotal_0,但它并不存在。请仔细检查。