数据表" footerCallback"功能不在页脚中显示结果

时间:2017-02-01 15:34:26

标签: javascript jquery html datatable callback

我尝试获取每列的总和并在页脚中显示结果。我使用了Datatables提供的"footerCallback"函数。但是它没有在页脚中显示任何内容

数据表解释

  

"注意,如果表没有tfoot元素,则此回调   不会被解雇。"

所以我已经将tfoot添加到表中,因此回调将被解雇

<table id="monthlytable" class="display" cellspacing="0" width="100%">  
<thead></thead><tfoot></tfoot></table>

回调功能

"footerCallback": function ( tfoot, data, start, end, display ) {
var api = this.api(), data;

// Remove the formatting to get integer data for summation
var intVal = function ( i ) {
return typeof i === 'string' ?
    i.replace(/[\$,]/g, '')*1 :
    typeof i === 'number' ?
    i : 0;
};

// Total over all pages
total = api
  .column( 3 )
  .data()
  .reduce( function (a, b) {
        return intVal(a) + intVal(b);
    }, 0 );

// Update footer
var numFormat = $.fn.dataTable.render.number( '\,', '.', 2, '£' ).display;
    $( api.column( 3 ).footer() ).html(numFormat(total));
}

我尝试使用"headerCallback"使用与上面相同的代码(更改为显示在标题中)并且它完全正常。

有没有理由说headerCallback工作但没有footerCallback?

4 个答案:

答案 0 :(得分:1)

问题是未找到页脚。

我必须使用$("#monthlytable").append('<tfoot><th></th></tfoot>');

添加页脚

您需要确保<th><tfoot>个代码的数量与您的表格所包含的表格标题数量相匹配(这也需要包含隐藏的列)。因此,5个表格标题表示5个<th>标记,例如:  $("#monthlytable").append('<tfoot><th></th><th></th><th></th><th></th><th></th></tfoot>');

您还需要将$("#monthlytable").append('<tfoot><th></th></tfoot>');放在初始化数据表的位置。例如:

$("#monthlytable").append('<tfoot><th></th></tfoot>');
var table = $('#monthlytable').DataTable({
// datatable elements 
});

答案 1 :(得分:1)

添加此内容:

buttons: [{ extend: 'print',
            footer: true }]

答案 2 :(得分:0)

//Below code worked for me
//Bootstrap table 
//Below scripts required
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="js/jquery.dataTables.min.js"></script>
$('#divID').html('<table id="tableID"><tr><th>head</th></tr><thead></thead><tbody><tr><td>some data</td</tr><tfoot><tr id="foot"></tr><tfoot></tbody></table>');

var table = $('#tableID').DataTable( {
                    "dom": '<"top"if>t<"bottom"><"clear">',
                    "bSort": false,
                    "paging": false,
                    "bFilter": false,
                "footerCallback": function(row, data, start, end, display) {
                  var api = this.api();
                 var rcnt=0;
                  api.columns('.sum', {
                    page: 'current'
                  }).every(function() {
                    var sum = this
                      .data()
                      .reduce(function(a, b) {
                        var x = parseFloat(a) || 0;
                        var y = parseFloat(b) || 0;
                        return x + y;
                      }, 0);
                    console.log(sum); //alert(sum);

                    if(rcnt==0){
                        $("#foot").append('<td style="background:#a1eaed;color:black; text-align: center;">Total</td>');
                    }else{
                        $("#foot").append('<td style="background:#a1eaed;color:black; text-align: center;">'+sum+'</td>');
                    }
                    rcnt++;
                    //$(this.footer()).html(sum);
                  });
                }
            } );

答案 3 :(得分:0)

  "footerCallback": function ( row, data, start, end, display ) {
                          var api = this.api();
                          nb_cols = api.columns().nodes().length;
                          var j = 2;
                          while(j < nb_cols){
                            var pageTotal = api
                                  .column( j, { page: 'current'} )
                                  .data()
                                  .reduce( function (a, b) {
                                      return Number(Number(a) + Number(b)).toFixed(2);
                                  }, 0 );
                              // Update footer
                              $( api.column( j ).footer() ).html(pageTotal);
                            j++;
                          }
                        },