【问题标题】:I can't show the value of aaData for total, using datatable jquery我无法使用数据表 jquery 显示总计 aaData 的值
【发布时间】:2014-02-21 12:16:06
【问题描述】:

在“fnFooterCallback”中访问aaData 的值时遇到问题。

这是日志的输出:

aaData: [object Object],[object Object],[object Object],[object Object]

真的,我有 4 行要显示在数据表中,但我无法访问这些值来显示数据集中的总数。

我尝试使用这个:

"fnDrawCallback": function(oSettings) {
     console.log("aaData: "+oSettings.aoData ); 
     iTotal = [0, 0];
     for (var i = 0; i < oSettings.aoData.length; i++) {
         iTotal[0] += oSettings.aoData[i]._aData.quantity;
     }

    //Totales
     $("#Totales").empty();
     $("#Totales").append('<th>sum</th><th>'+iTotal[0]+'</th>');
}

我也试试这个:

"fnFooterCallback" : function(nRow, aaData, iStart, iEnd, aiDisplay) {
    console.log("aaData: " + aaData);
    var totalCantidad = 0;
    for ( var i = 0; i < aaData.length; i++) {
        totalCantidad = totalCantidad+ parseInt(aaData[i].Cantidad) * 1;
    }
    var nCells = nRow.getElementsByTagName('th');
    nCells[1].innerHTML = totalCantidad;
}

这是我对数据表的定义:

$("#lineOutletTable").dataTable({
    "bInfo" : false,
    "bPaginate" : false,
    "bLengthChange" : true,
    "iDisplayLength" : -1,
    "bFilter" : false,
    "bSort" : true,
    "aaSorting" : [ [ 0, "asc" ] ],
    "bAutoWidth" : false,
    "oLanguage" : spanishInfo,
    "aoColumns" : columnsTableLine,
    "sPaginationType" : "bootstrap",
    "iDisplayStart" : 20,
    "sScrollY" : "60px",
    "sDom" : "<row-fluid'<'span6 wrapMedidasReales'><'span6 wrapPrecios'>>t<row-fluid'<'span6 'l><'span6'p>>",
    "fnDrawCallback" : function(oSettings) {
        console.log("aaData: " + oSettings.aoData);
        iTotal = [ 0, 0 ];
        for ( var i = 0; i < oSettings.aoData.length; i++) {
            iTotal[0] += oSettings.aoData[i]._aData.quantity;
        }
        // Totales
        $("#Totales").empty();
        $("#Totales").append('<th>sum</th><th>' + iTotal[0] + '</th>');
    },
    "fnFooterCallback" : function(nRow, aaData, iStart, iEnd, aiDisplay) {
        console.log("aaData: " + aaData);
        var totalCantidad = 0;
        for ( var i = 0; i < aaData.length; i++) {
            totalCantidad = totalCantidad + parseInt(aaData[i].Cantidad) * 1;
        }
        var nCells = nRow.getElementsByTagName('th');
        nCells[1].innerHTML = totalCantidad;
    }
});

我从Ajax 读取值,数据集正常工作,但总数除外。

如何访问 aaData 中的值?

【问题讨论】:

  • 试试:iTotal[0] += parseint(oSettings.aoData[i]._aData.quantity);

标签: javascript jquery ajax datatables


【解决方案1】:

要准确理解您想要做什么有点困难,因为您没有包含表格的 html 部分和 ajax 调用的结果。所以我不知道你想在哪里显示你的总数。

看看这段代码:

$(function() {
  totals = 0;
  var otable = $("#datatable").dataTable({
    "fnFooterCallback": function(nRow, aaData, iStart,
      iEnd, aiDisplay) {
      x = aaData;
      $.each(x, function(key, value) {
        totals = totals + parseInt(value[1]);
      })
      $("#Totales").empty();
      $("#Totales").append('Totals: ' + totals);

    }
  });
});

还有这个Plunker

这至少应该给你一个关于如何访问 aaData 的提示。也许使用 plunker 作为基础并填写您完成的定义。这样我们就有了更好的起点。

【讨论】:

    【解决方案2】:

    Html 的代码是:

    <div class="row finder-line-outlet-container table-wrapper">
                    <table cellpadding="0" cellspacing="0" border="0"
                        class="table table-striped table-bordered table-condensed dataTable customTable"
                        id="lineOutletTable" aria-describedby="example_info">
                        <thead>
                            <tr>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th></th>
                            </tr>
                        </thead>
    
                        <tfoot>
                            <tr>
                                <th>Totales</th>
                                <th id="totalCantidad"></th>
                                <th></th>
                                <th></th>
                                <th></th>
                                <th id="totalMetros"></th>
                                <th></th>   
                                <th></th>                           
                            </tr>
                    </table>
                </div>
    

    我使用你的函数,但错误是一样的,当我在控制台中打印时,totals 的值为 NaN。

    我使用 ajax 访问数据。

    我解决了这个问题,在函数 Ajax 中,带来数据,我对值求和,然后在 fnFooterCallback 中打印值,但是,当对 fnFooterCallback 中的值求和时,为什么不工作?

    【讨论】:

    • 如果你得到一个 NaN 错误(不是数字),它可能与对非数字的值求和有关,比如字符串。尽管它们可能看起来像正常数字,但实际上并非如此。这就是 parseint() 的用途。它将字符串转换为可以通过数学运算处理的数字。再说一遍:如果您向我们展示您从 ajax 调用中获得的数据,将会更有帮助。并且请注意:不要将您的问题的扩展作为无效的答案发布,并且对于想要学习如何解决问题的其他人没有价值。
    【解决方案3】:

    也许这样:

    console.log("aaData: "+oSettings.aoData.length);
    

    如果我的问题没问题,应该可以正常工作..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2016-10-23
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多