0

我有一个不断返回 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
  });
  });
  }

现在脚本返回:€undefined€undefined€undefined€undefined€undefined€undefined€undefined€undefined€1197.00

显然我的方向是正确的,因为 1197.00 欧元是正确的值。“未定义”的东西可能是由于 html 部分?有人可以帮我将 $('') 部分更改为“total”之类的内容,以便我可以将 HTML 部分排除在外吗?

4

3 回答 3

0

如果你调用parseInt()一个空字符串或未定义的变量,你会得到一个NaN错误。我怀疑这是正在发生的事情。

执行以下检查以避免这些情况:

if(!isNaN(parseInt(item.val())))
{
    totaal+= parseInt(item.val());
}

此外,只是为了确保您知道,使用parseInt()将删除小数位。usingparseFloat()将保留它们。

于 2012-06-01T02:37:48.140 回答
0
$('.grandTotal').each(function(){
  var item = $(this);               // FOUND THIS ON FORUM
  totaal+= parseInt(item.val()); 
  ...

在这一部分中,您将遍历一组 DOM 元素。根据这些元素,它们可能没有功能val(),所以item.val()不是数字而是undefined

于 2012-05-31T22:42:07.243 回答
0

我认为 lucuma 是对的,你需要解析浮动做 parseFloat($item.val())

于 2012-05-31T22:44:44.050 回答