数据表单击表头跨度时启用/禁用列排序

时间:2019-03-04 12:13:04

标签: datatables bootstrap-modal

根据有关问题的一些建议,我能够解除绑定并再次绑定默认的列排序事件。

但是当存在一个或多个隐藏列时,结果以一种奇怪的排序行为结束。

期望的行为:

我在Databales列的TH内有一个跨度,该跨度必须使用远程URL打开引导方式。但我不希望触发排序默认事件,所以我将范围的onClick放置在此位置:$('th').off('click.DT'); 然后我有这个处理程序,该处理程序将触发modal,然后将顺序重新绑定侦听没有问题:`

$('body').on('click', '[data-toggle="modal"]', function(){
        $($(this).data("target")+' .modal-body').load($(this).data("remote"));
            table.columns().every( function (i) {               
             if(table.columns().visible()[i]){
                table.order.listener( $('#Testata th:eq('+i+')'), i);
             }
            });
    });`

存在隐藏的列时出现问题: 一个隐藏的列,即:`

'columnDefs': [          
            {
                "targets": [0],
                "visible": false
            }]`

订单侦听器适用于所有列,但排序错误。 包含多于一个的隐藏列,即:`

'columnDefs': [          
            {
                "targets": [0],
                "visible": false
            },
            {
                "targets": [3],
                "visible": false
            }
        ]`

订单侦听器不适用于所有列,并且排序错误。

这里有一个fiddle以模拟情况,请单击第一列的(i)范围。

非常感谢。

1 个答案:

答案 0 :(得分:0)

您需要分配另一个仅显示可见列的运行编号:

$('body').on('click', '[data-toggle="modal"]', function(){
    $($(this).data("target")+' .modal-body').load($(this).data("remote"));
    var elIdx = 0;
    table.columns(':visible').every( function (i) {
        table.order.listener( $('#Testata th:eq('+elIdx+')'), i);
        elIdx++;
    });
});

jsFiddle