Datatables Включить / отключить сортировку столбцов при нажатии на диапазон заголовка таблицы - PullRequest
0 голосов
/ 04 марта 2019

Следуя некоторым предложениям по связанным вопросам, я смог отменить привязку и снова связать событие сортировки столбцов по умолчанию.

Но закончилось странным поведением сортировки, когда есть один или несколько скрытых столбцов.

Желаемое поведение:

У меня есть интервал внутри TH столбца Databales,который должен открыть бутстрап-модал с удаленным URL.но я не хочу, чтобы событие сортировки по умолчанию было запущено, поэтому на клик диапазона я поместил это: $('th').off('click.DT');, тогда у меня есть этот обработчик, который запускает модальный режим, а затем снова связывает прослушивание порядка без проблем: `

$('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
            }
        ]`

слушатель порядка работает НЕ по всем столбцам, и сортировка неверна.

Здесь скрипка для имитацииСценарий, пожалуйста, нажмите на (i) промежуток в первом столбце.

большое спасибо.

1 Ответ

0 голосов
/ 05 марта 2019

Вам нужно назначить другой номер, который учитывает только видимые столбцы:

$('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

...