我有一个不断返回NaN的功能。我搜索了论坛并尝试了我发现的所有内容,但很明显我看错了(可能)奇怪的代码:)
我的代码:
function bakVormTotals(targetClass){
$.getJSON('http://shop.com/cart/?format=json', function(data){
var totaal = 0;
$('.grandTotal').each(function(){ ////////////
var item = $(this); // FOUND THIS ON FORUM
totaal+= parseInt(item.val()); ///////////
})
$.each(data.cart.totals, function(index, totals){
$('<strong/>').html('€' + (+totals.grand_total).toFixed(2)).appendTo(targetClass); // the grand total price
});
});
}
json看起来像这样:"totals":{"sub_total":"335.29","taxes":[{"percentage":"0.1900","amount":63.71}],"grand_total":"399.00"}}
如果这可能有所帮助。
非常感谢任何帮助
更新1
好的,我发现了一些有趣的新东西。我将上面的功能更改为:
function bakVormTotals(targetClass){
$.getJSON('http://shop.com/cart/?format=json', function(data){
$.each(data.cart, function(index, totals){
$('<strong/>').html('€' + totals.grand_total + '').appendTo(targetClass); // the grand total price
});
});
}
现在脚本返回: €未定义未定义€€未定义未定义€€未定义未定义€€未定义未定义€€1197.00
显然我正朝着正确的方向前进,因为€1197.00是正确的价值。 “未定义”的东西可能是由于html部分?有些人可以帮助我将$('')部分更改为“total”,这样我就可以将HTML部分保留下来了吗?
答案 0 :(得分:0)
$('.grandTotal').each(function(){
var item = $(this); // FOUND THIS ON FORUM
totaal+= parseInt(item.val());
...
在这部分中,您将遍历一组DOM元素。根据这些元素,它们可能没有函数val()
,因此item.val()
不是数字,而是undefined
。
答案 1 :(得分:0)
我认为lucuma是对的,你需要解析浮动做parseFloat($ item.val())
答案 2 :(得分:0)
如果在空字符串或未定义变量上调用parseInt()
,则会出现NaN
错误。我怀疑这是发生了什么。
进行以下检查以避免这些情况:
if(!isNaN(parseInt(item.val()))) { totaal+= parseInt(item.val()); }
另外,为了确保您知道,使用parseInt()
会丢弃小数位。使用parseFloat()
将保留它们。