在以下代码中,运行时,totalQuantity、totalCost这两个变量总是在网页上显示NaN这个值,而不是我设想的让它计算出各行的总和。但是如果我把这两个语句“ totalQuantity+=quantity; totalCost+=cost;”改成“ totalQuantity=quantity; totalCost=cost;”时,它是会显示出循环的最后一行的值。所以是不是这两个语句“ totalQuantity+=quantity; totalCost+=cost;”有什么问题还是其它的原因呢
$('.Gquantity input').keypress(function(event){
if(event.which&&(event.which<48||event.which>57)){
event.preventDefault();
}
}).change(function(){
var totalQuantity = 0;<!--所有商品的数量-->
var totalCost = 0;<!--所有商品的金额-->
<!---通过用户对商品数量选择的变换来计算对应的金额->
$('#cart tbody tr').each(function() {
                        var price = parseFloat($('.Gprice',this).text().replace(/^[^\d.]*/,''));
price = isNaN(price)? 0:price;
var quantity = parseInt($('.Gquantity input',this).val(),10);
var cost = quantity * price;
$('.Gcost',this).text('¥'+cost.toFixed(2));
totalQuantity+=quantity;
totalCost+=cost;
//<!--对应商品总额的计算-->
});
alert(totalCost);
$('#subtotalcost').text('¥'+totalCost.toFixed(2));<!--原价总额-->
$('#totalquantity').text(totalQuantity);<!--总数量-->


<!--优惠金额的计算-->
// var count = parseFloat($('.count.Gcost').text().replace(/^[^\d.]*/,''));
// totalCost += count;

<!--运费的计算-->
$('#shippingquantity').text(String(totalQuantity));
var shippingRate = parseFloat($('#shippingprice').text().replace(/^[^\d.]*/,''));
var shipping = totalQuantity * shippingRate;
$('#shippingcost').text('¥'+shipping.toFixed(2));
totalCost += shipping;

<!--实际所需付款金额-->
$('#tatal').text('¥'+totalCost.toFixed(2));

});
JavaScript函数

解决方案 »

  1.   

    看不懂代码是吧?出现NaN的原因是
    $('.Gprice',this).text()
    $('.Gquantity input',this).val()可能是取不到值或者.Gprice,.Gquantity元素不存在
      

  2.   

    可是$('.Gcost',this).text('¥'+cost.toFixed(2));这句话执行出效果了啊
      

  3.   

    var price = parseFloat($('.Gprice',this).text().replace(/^[^\d]*/,''));
      

  4.   

    一般出现这种情况都是在 计算整型或者带浮点的时候 计算出了问题,
    最好是先用正则验证输入的内容,然后 计算的时候用 parseInt("123")  或者parseFlost("123") 根据你实际的类型来进行转换。 
      

  5.   

    再补充一点,比如 $('#tatal').text()   这种方式很容易得到的数据有空格, 最好是去除下空格,$.trim($('#tatal').text())确保计算之前的数据格式都正确, 可以减少一些错误。
      

  6.   

    NAN应该是在数据计算的过程中出现不可知(不可识别)的数据  建议查查计算数据的代码 看看计算过程有没问题