DataTables警告:添加导出功能后无法重新初始化DataTable

时间:2018-03-20 17:57:32

标签: javascript datatables sinatra sinatra-activerecord

尝试将Datatables添加到我的Sinatra App中。它具有导出JS内置表的功能。我能够运行它,但是要解决此行的错误。 Datatables Error

如何将这些额外的JS代码合并到我的.DataTable中?我不完全确定我需要放置它。这是抛出错误的当前代码(对不起格式化):

$(document).ready(function() {
  $('#ma_pen_report').DataTable( {
    dom: 'Bfrtip',
    buttons: [
        'copy', 'csv', 'excel', 'pdf', 'print'
    ]
} );
} );
$(document).ready(function() {
  $('#ma_pen_report').DataTable( {
    initComplete: function () {
      this.api().columns().every( function () {
        var column = this;
        var select = $('<select><option value=""></option></select>')
          .appendTo( $(column.footer()).empty() )
          .on( 'change', function () {
            var val = $.fn.dataTable.util.escapeRegex(
            $(this).val()
          );
        column
          .search( val ? '^'+val+'$' : '', true, false )
          .draw();
        } );
      column.data().unique().sort().each( function ( d, j ) {
        select.append( '<option value="'+d+'">'+d+'</option>' )
      } );
    } );
  }
} );
} );

我想我只需要插入dom:&amp;按钮:数组进入下一个代码块但是我找不到如何做到这一点的例子。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

正如错误所述,问题在于您将表格初始化两次 - 一次在第2行,再次在第10行。您也复制了(document).ready(function()。要在一次点击中完成所有操作,请按照以下步骤操作:

$(document).ready(function() {
$('#ma_pen_report').DataTable({
    dom: 'Bfrtip',
    buttons: [
        'copy', 'csv', 'excel', 'pdf', 'print'
    ],
    initComplete: function() {
        this.api().columns().every(function() {
            var column = this;
            var select = $('<select><option value=""></option></select>')
                .appendTo($(column.footer()).empty())
                .on('change', function() {
                    var val = $.fn.dataTable.util.escapeRegex(
                        $(this).val()
                    );
                    column
                        .search(val ? '^' + val + '$' : '', true, false)
                        .draw();
                });
            column.data().unique().sort().each(function(d, j) {
                select.append('<option value="' + d + '">' + d + '</option>');
            });
        });
    }
});

});