jQuery Datatables自定义过滤不适用于所有表

时间:2019-03-20 09:41:05

标签: javascript jquery datatables

我正在使用jquery插件Datatables 1.10,并且我想使用custom search来过滤同一页面上的两个表,如下所示:

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 :(得分:0)

事实证明,问题与模式表的加载晚于另一个表的事实无关。过滤不起作用的原因是配置

"searching": false
我已应用的

,因为模式表不应有搜索框。

经过一些调试之后,我注意到Datatables中的内部变量bFilter设置为false,this page向我解释说这是将searching指定为假。它不仅隐藏了搜索框,而且还使整个表变得不可搜索。

总而言之,如果我想摆脱表格中的搜索框,但是我仍然希望能够通过其他方式在表格上应用自己的过滤条件,则必须将"searching": false切换到模态表的配置并将其替换为

"dom": 'lrtip'

仅隐藏搜索框(通过从字符串中省略f),如herehere所述。