我对 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/