在页面加载上清除/重新应用tablesorter过滤

时间:2016-03-21 18:41:19

标签: javascript jquery filter tablesorter reset

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

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

我有一个包含表格的页面和一个复选框。选中该复选框后,我将过滤器应用于第7行,即下拉框的值。它运作得很好。

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

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

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

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

过滤功能,读取复选框和下拉框,并设置过滤器和tablesorter inialization。

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'吗? 似乎没什么用。

3 个答案:

答案 0 :(得分:0)

试试这个:

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

或者这个:

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

答案 1 :(得分:0)

首先关闭为&#34; filterInit&#34;设置的代码。和&#34; filterEnd&#34;与将Exception in thread "main" java.lang.UnsupportedClassVersionError: a (Unsupported major.minor version 51.0)设置为true

基本相同

使用$('table').trigger('filterResetSaved');是清除存储过滤器值所需的方法;但同样,它仅在filter_saveFilters选项为true时才有效。

对于复选框,您可以设置复选框属性autocomplete="off"filter_saveFilters option)以在页面刷新时清除状态;但是现在filter_saveFilters选项设置为true,检查#slideTwo设置的任何过滤器都将在页面刷新时设置,因为过滤器值已保存。也许该过滤器的值可能是检查了tablesorter初始化,如果它与#slideTwo的值匹配,你可以设置复选框状态吗?

如果您需要有关该代码的帮助,如果您提供了演示或示例,则会更容易。我设置ref以供您修改。

$(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,
      filter_saveFilters: true
    },
    initialize: function(table) {
      var c = table.config,
        $s2 = $('#slideTwo'),
        // c.$filters points to the TD, not the input
        $filter = c.$filters.eq(3).find('.tablesorter-filter'),
        val = $filter.val();
      $s2.prop('checked', val === 'something');
    }
  });
});

*注意:已注释掉的选项已设置为默认值。

答案 2 :(得分:0)

因此,如果在页面loadcomplete后面的代码中选中了复选框,那么我可以通过将数据值添加到表的标题来简化整个操作....

If Me.slideTwo.Checked=True Then GridView1.HeaderRow.Cells(10).Attributes.Add("data-value",selUsers.SelectedItem.Text)

和presto changeo它是一种享受。我仍然不知道为什么在表分类器初始化完成后调用javascript函数实际上不起作用。它将文本设置为过滤器字段,但不应用它。一旦页面加载,javascript就可以正常工作。