Пользовательская фильтрация jQuery Datatables не работает на всех таблицах - PullRequest
0 голосов
/ 20 марта 2019

Я использую плагин jquery Datatables 1.10 и хочу использовать пользовательский поиск для фильтрации двух таблиц на одной странице, например:

function filterTableByErrorClass(propertiesTable, errorClassName) {
    $.fn.dataTable.ext.search.pop();
    $.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) {
        return $(propertiesTable.row(dataIndex).node()).find('td > div').hasClass(errorClassName);
    });
    propertiesTable.draw();
}

Моя проблема в том, что это работает только для одной таблицы, той, которая готова при загрузке страницы. Другой находится внутри модального js и загружается с помощью вызова ajax (см. Ниже). Он загружается как HTML и после загрузки должен вести себя так же, как и другая таблица, например, вся фильтрация должна выполняться на стороне клиента.

$("div.modal.edit-category-info").on('shown.bs.modal', function () {
    req = $.ajax({
        url: "some_url",
        method: "GET",
        success: function(data) {
            $('#modalContent').html(data);
            if ( $.fn.dataTable.isDataTable( '#edit-category-table' ) ) {
                editCategoryTable = $('#edit-category-table').DataTable();
            }
            else {
                editCategoryTable = $('#edit-category-table').DataTable( {
                "searching": false,
                "paging": false,
                "ordering": false,
                "bInfo" : false
                } );
            }
            errorValidator("edit-category-table");

            attachFilteringEvents("edit-category-form");
        },
    });
});

У меня есть кнопка для обеих таблиц, которая вызывает функцию filterTableByErrorClass (), и я могу убедиться, что она вызывается в обоих случаях, поместив точку останова в первую строку. Однако, если я помещаю точку останова внутри функции фильтрации (внутри filterTableByErrorClass ()), эта цель получает удар только при фильтрации первой таблицы, а не при попытке отфильтровать модальную таблицу.

Является ли $ .fn.dataTable.ext.search каким-то образом не осведомленным о новой модальной таблице? Могу ли я сделать это как-нибудь?

1 Ответ

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

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

"searching": false

, который я применил, поскольку у модальной таблицы не должно быть поля поиска.

После некоторой отладки я заметил, что внутренняя переменная в Datatables, bFilter, была установлена ​​в false и эта страница объяснила мне, что это побочный эффект от указания searching как false , Он не только скрывает окно поиска, но и делает всю таблицу недоступной для поиска.

Подводя итог, если я хочу избавиться от окна поиска из таблицы, но я все еще хочу иметь возможность применить свою собственную фильтрацию к таблице другими способами, я должен отключить "searching": false в конфигурации модальной таблицы и замените ее на

"dom": 'lrtip'

, который просто скрывает поле поиска (пропуская f в строке), как объяснено здесь и здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...