JQuery每次计数结果错误

时间:2014-04-21 16:58:41

标签: jquery each

我有一个按钮,使表格中的最后tr无效。每次执行此操作时,使用函数mainTotalCalc()再次计算总数。

通过使用.each和类来计算总数。

当我到达最后一排时,问题出现了。总数将保持最后总数。它永远不会达到0.00

现在我想我可以看到原因,因为JQ每个都考虑变量中的最后一个总数。

我被困在如何在总计算正确的情况下使最后剩余的行无效。

The Fiddle(但是parseFloat似乎在这里不起作用)

JS / JQ

function mainTotalCalc() {
    var activetableID = $("li.till_table_button.active").attr('id');
     // alert(activetableID);
    var tablenumber = $("#"+activetableID).data("tableref");
     // alert(tablenumber); //testing

     var newtotal=0,total=0;

     $('.till__tablepanel_table_'+tablenumber+'_row__totalprice').each( function(i) {
      var number = $(this).text();
       //alert(content);
       //num = parseInt(number);
      num = parseFloat(number);
      newtotal += num;
       // alert(number); //testing

      totalpriceDecimal = newtotal.toFixed(2);
      $('#till__totalpanel_table_'+tablenumber+'_price').html(newtotal.toFixed(2));
       // alert(totalpriceDecimal); 
      i++;

     });

}

在最后一次无效之前 before void

在最后一次无效之后(总数保持为1.00且不应该) after void

3 个答案:

答案 0 :(得分:1)

如果没有更多行,则设置保护条件:

if ($('.till__tablepanel_table_0_row__totalprice').length == 0)
  $('#till__totalpanel_table_0_price').html('0.00');

DEMO

答案 1 :(得分:0)

您的代码存在的问题是,总计正在更新内部 .each循环。

如果现在有总行数,则不会运行。

按如下方式修改您的功能:

function mainTotalCalc() {
    $('.till__tablepanel_table_'+tablenumber+'_row__totalprice').each( function(i) {
      var number = $(this).text();
       //alert(content);
       //num = parseInt(number);
      num = parseFloat(number);
      newtotal += num;
       // alert(number); //testing

      totalpriceDecimal = newtotal.toFixed(2);
       // alert(totalpriceDecimal); 
      i++;

     });
     // Move this line outside of the .each loop
     $('#till__totalpanel_table_'+tablenumber+'_price').html(newtotal.toFixed(2));
}

答案 2 :(得分:0)

您错过了 newtotal 变量声明,只需执行此操作:

function mainTotalCalc() {
    var newtotal = 0.0; // MISSED VARIABLE DECLARATION
    $('.till__tablepanel_table_0_row__totalprice').each( function() {         
      var number = $(this).text();
      console.log('number: ' + number);

      newtotal += parseFloat(number);          
      console.log('newtotal= ' + newtotal);

      totalpriceDecimal = newtotal.toFixed(2);
      $('#till__totalpanel_table_0_price').html(totalpriceDecimal);
      // alert(totalpriceDecimal);

     });   
}