【发布时间】:2016-03-21 18:41:18
【问题描述】:
我不擅长 javascript,有时我可以复制 JQuery 代码并使其工作。请耐心等待我。
我使用的是几天前最新版本的 tablesorter。
我有一个带有表格和复选框的页面。选中该复选框后,我将过滤器应用于第 7 行,即下拉框的值。效果很好。
当我发布页面时,过滤器丢失,但复选框选中状态保持不变,这是不同步的。所以我调用了读取复选框状态并再次设置过滤器的函数,但它不起作用。似乎该表未初始化,因此实际上并未应用过滤器。我已经在 CodeBehind 和 window.onload 函数中尝试了 _LoadComplete。都不工作。
所以我尝试了 filterinit 和 filterend 函数,以及一个简单的 filter_saveFilters : true。这完美地维护了过滤,但是当我转到另一个页面并返回时,过滤器被维护并且复选框处于未选中状态。又不同步了。
我发现有两种方法可用于重置已保存的过滤器。 $('table').trigger('filterReset'); $('table').trigger('filterResetSaved');我似乎无法让他们工作。
所有问题都发生在页面加载时。简单地说,如果复选框被选中,应用过滤器并保留它,直到复选框被更改或页面被加载而不回发。
读取复选框和下拉框并设置过滤器和tablesorter初始化的过滤器函数。
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');
我需要将“表格”更改为“#Gridview1”吗? 似乎没有任何效果。
【问题讨论】:
标签: javascript jquery filter tablesorter reset