javascript - 在页面加载时清除/重新应用表排序器过滤

标签 javascript jquery filter tablesorter reset

我对 javascript 不太熟悉,有时我可以复制 JQuery 代码并使其工作。请耐心等待我。

几天前我正在使用最新版本的 tablesorter。

我有一个带有表格和复选框的页面。选中该复选框后,我将过滤器应用于第七行,即下拉框的值。它运行完美。

当我发布页面时,过滤器丢失,但复选框选中状态保持不变,这是不同步的。所以我调用读取复选框状态并再次设置过滤器的函数,但它不起作用。看起来表尚未初始化,因此过滤器实际上并未应用。我已经在 CodeBehind 和 window.onload 函数中尝试过 _LoadComplete 。都不起作用。

所以我尝试了filterinit和filterend函数,以及一个简单的filter_saveFilters:true。这完美地保持了过滤,但是当我转到另一个页面并返回时,过滤器被保持并且复选框处于未选中状态。再次不同步。

我发现有两种方法可用于重置已保存的过滤器。 $('table').trigger('filterReset'); $('table').trigger('filterResetSaved');我似乎无法让他们工作。

所有问题都发生在页面加载时。简而言之,如果选中该复选框,则应用过滤器并保留它,直到该复选框更改或加载页面而不回发。

过滤器函数读取复选框和下拉框并设置过滤器和表排序器初始化。

function filterTS() {
    if (document.getElementById("slideTwo").checked == true) {
        var e = document.getElementById("selUsers");
        var selectedText = e.options[e.selectedIndex].text;
        var filters = $('table').find('input.tablesorter-filter'),  col = 7, txt = selectedText, cur = filters.eq(col).val(), mult, i;
        }
        else {
            var filters = $('table').find('input.tablesorter-filter'), col = 7, txt = '', cur = filters.eq(col).val(), mult, i;
        }
        if (cur && txt !== "") {
            mult = cur.split('|');
            i = $.inArray(txt, mult);
            if (i < 0) {
                mult.push(txt);
            } else {
                mult.splice(i, 1);
            }
            txt = mult.join('|');
        }
        filters.eq(col).val(txt).trigger('search', false);
    }
    //Tablesorter Initialization
    $(window).ready(function () {
        $("#GridView1").tablesorter({
            theme: 'green',
            sortList: [[0, 1]],
            headerTemplate: '{content}{icon}',
            dateFormat: 'mmddyyyy',
            sortMultiSortKey: 'shiftKey',
            sortResetKey: 'ctrlKey',
            usNumberFormat: true,
            widgets: ['zebra', 'filter'],
            widgetOptions: {
                filter_ignoreCase: true,
            }
        });
        $('table')
            .bind('filterInit', function () {
                // check that storage ulility is loaded
                if ($.tablesorter.storage) {
                    // get saved filters
                    var f = $.tablesorter.storage(this, 'tablesorter-filters') || [];
                    $(this).trigger('search', [f]);
                }
            })
            .bind('filterEnd', function () {
                if ($.tablesorter.storage) {
                    // save current filters
                    var f = $(this).find('.tablesorter-filter').map(function () {
                    return $(this).val() || '';
                    }).get();
                    $.tablesorter.storage(this, 'tablesorter-filters', f);
                }
            });
        $("#slideTwo").on("click", filterTS);
        $("#slideOne").on("click", hidedates);

我做错了什么?为什么我无法在页面加载时通过代码设置过滤器?我到底该把它放在哪里:

$('table').trigger('filterReset');
$('table').trigger('filterResetSaved');

我需要将“table”更改为“#Gridview1”吗? 似乎没有任何作用。

最佳答案

试试这个:

$(document).ready(function(){
  $('table').trigger('update');
});

或者这个:

$(document).ready(function(){
  $('table').trigger('updateAll', [resort]);
});

关于javascript - 在页面加载时清除/重新应用表排序器过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139104/

相关文章:

javascript - 如何以更复杂的方式编写它?

hibernate - Hibernate过滤器插件在Grails中不起作用

android - 如何在 BaseAdapter 中使用 getFilter() 过滤 ListView

javascript - 如何在使用 ko.utils.arrayForEach 时获取索引值

javascript - 将 div 垂直居中于网格中放大的 div 的左侧和右侧

javascript - IE右键事件

arrays - 在自定义过滤器中调用 $scope ( Angular )

javascript - 除非文件是图像,否则如何防止使用 Multer 上传文件?

javascript - 如何自定义数据表中的表?

javascript - 如何使 bootstrap 下拉列表可拖动?