Jquery Datatables Colvis在列项目点击时触发preDrawCallback和DrawCallback两次

时间:2016-09-02 06:48:20

标签: javascript jquery datatables

请参阅我的测试用例

https://jsfiddle.net/1c3Lmace/13/

这是我的代码

$(document).ready(function() {
    $('#example').DataTable( {
        dom: 'C<"clear">lfrtip',
        "fnPreDrawCallback": function( oSettings ) {
          alert('pre');
        },
        "fnDrawCallback" : function() {
          alert('+++++');
        }
    } );
} );

当您转到显示/隐藏列并单击任何列项时,您将看到每个preDrawCallBack和drawCallback事件都会触发两次。

有没有人知道为什么会这样。

我希望在数据加载之前显示加载程序并隐藏它,以及何时成功加载数据。任何帮助表示赞赏

由于

1 个答案:

答案 0 :(得分:0)

事实上,事件会被触发两次,但只有在切换列可见性时才会被触发。

我认为在显示客户端处理的加载指示器时没有意义,列可见性变化发生得非常快。对于服务器端处理,已有processing选项。

你可以这样做。但是我必须添加alert(),因为列的切换速度非常快,Processing...消息很快就会消失。

$(document).ready(function() {
    $('#example').DataTable( {
        dom: 'C<"clear">lfrtip',
        processing: true,
        drawCallback : function() {
          $('.dataTables_processing', $('#example').DataTable().table().container()).hide();
        }
    } );
} );

$('#example').on( 'column-visibility.dt', function ( e, settings, column, state ) {
    $('.dataTables_processing', $('#example').DataTable().table().container()).show();
    alert('Column visibility is toggled');
} );

请参阅this jsFiddle以获取代码和演示。