簡體   English   中英

jQuery Datatables 自定義過濾不適用於所有表

[英]jQuery Datatables custom filtering not working on all tables

我正在使用 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 是否不知何故不知道新的模態表? 我能以某種方式讓它意識到嗎?

事實證明,問題與模態表加載晚於另一個的事實無關。 過濾不起作用的原因是配置

"searching": false

我已經申請了,因為模態表不應該有搜索框。

經過一些調試后,我注意到 Datatables 中的一個內部變量bFilter被設置為 false,此頁面向我解釋說這是將searching指定為 false 的副作用。 它不僅隱藏了搜索框,而且還使整個表格不可搜索。

綜上所述,如果我想從表格中去掉搜索框,但我仍然希望能夠通過其他方式在表格上應用我自己的過濾,我必須在配置中切換掉"searching": false模態表並將其替換為

"dom": 'lrtip'

它只是隱藏搜索框(通過從字符串中省略 f),如此處和此處所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM