Javascript 在页面加载时清除/重新应用tablesorter筛选
我对javascript不是很在行,有时我可以复制JQuery代码并使其工作。请对我耐心点 我使用的是几天前最新版本的tablesorter 我有一个带有表格和复选框的页面。选中该复选框后,我将对第7行应用一个过滤器,该行是下拉框的值。它工作得很好 当我发布页面时,过滤器将丢失,但复选框的选中状态将保持,这是不同步的。因此,我调用了读取复选框状态并再次设置过滤器的函数,但它不起作用。表似乎没有初始化,因此过滤器实际上没有被应用。我在CodeBehind和window.onload函数中尝试了_LoadComplete。两者都不起作用 所以我尝试了filterinit和filterend函数,还有一个简单的filter\u saveFilters:true。这完美地保持了过滤,但是当我转到另一个页面并返回时,过滤器被保持,复选框处于未选中状态。再次失去同步 我发现有两种方法可以用来重置保存的过滤器$('table')。触发器('filterReset')$('table')。触发器('filterResetSaved');我似乎无法让他们工作 所有问题都发生在页面加载时。简单地说,如果选中了复选框,则应用过滤器并保留它,直到复选框更改或页面加载而不回发 Filter函数,用于读取复选框和下拉框,并设置筛选器和表排序器初始化Javascript 在页面加载时清除/重新应用tablesorter筛选,javascript,jquery,filter,tablesorter,reset,Javascript,Jquery,Filter,Tablesorter,Reset,我对javascript不是很在行,有时我可以复制JQuery代码并使其工作。请对我耐心点 我使用的是几天前最新版本的tablesorter 我有一个带有表格和复选框的页面。选中该复选框后,我将对第7行应用一个过滤器,该行是下拉框的值。它工作得很好 当我发布页面时,过滤器将丢失,但复选框的选中状态将保持,这是不同步的。因此,我调用了读取复选框状态并再次设置过滤器的函数,但它不起作用。表似乎没有初始化,因此过滤器实际上没有被应用。我在CodeBehind和window.onload函数中尝试了_L
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);
是否需要将“表格”更改为“网格视图1”?
似乎什么都不管用。试试这个:
$(document).ready(function(){
$('table').trigger('update');
});
或者这个:
$(document).ready(function(){
$('table').trigger('updateAll', [resort]);
});
试试这个:
$(document).ready(function(){
$('table').trigger('update');
});
或者这个:
$(document).ready(function(){
$('table').trigger('updateAll', [resort]);
});
首先,为“filterInit”和“filterEnd”设置的代码基本上与将设置为
true
相同
使用$('table').trigger('filterResetSaved')
是清除存储的过滤器值所需的方法;但同样,只有当filter\u saveFilters
选项为true
时,它才起作用
对于复选框,您可以设置复选框属性autocomplete=“off”
()以在页面刷新时清除状态;但是现在,如果将filter\u saveFilters
选项设置为true
,则通过选中#slideTwo
设置的任何过滤器都将在页面刷新时设置,因为过滤器值已保存。。也许可以在tablesorter初始化时检查该筛选器的值,如果它与#slideTwo
的值匹配,您可以设置复选框状态
如果您需要代码方面的帮助,那么提供一个演示或示例会更容易。我为你设置了修改
$(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');
}
});
});
*注意:注释掉的选项已设置为默认值。首先,为“filterInit”和“filterEnd”设置的代码基本上与将设置为
true
相同
使用$('table').trigger('filterResetSaved')
是清除存储的过滤器值所需的方法;但同样,只有当filter\u saveFilters
选项为true
时,它才起作用
对于复选框,您可以设置复选框属性autocomplete=“off”
()以在页面刷新时清除状态;但是现在,如果将filter\u saveFilters
选项设置为true
,则通过选中#slideTwo
设置的任何过滤器都将在页面刷新时设置,因为过滤器值已保存。。也许可以在tablesorter初始化时检查该筛选器的值,如果它与#slideTwo
的值匹配,您可以设置复选框状态
如果您需要代码方面的帮助,那么提供一个演示或示例会更容易。我为你设置了修改
$(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');
}
});
});
*注意:被注释掉的选项已经设置为默认值。因此,如果在代码隐藏页面loadcomplete中这样选中复选框,我会将数据值添加到表格的标题中,从而简化整个操作。
If Me.slideTwo.Checked=True Then GridView1.HeaderRow.Cells(10).Attributes.Add("data-value",selUsers.SelectedItem.Text)
而普雷斯托·切诺,这是一种享受。我仍然不知道为什么在表分类器初始化完成后调用javascript函数实际上不起作用。它将文本设置到过滤器字段中,但不应用它。但是,一旦页面加载,javascript就可以很好地工作。因此,如果在页面加载完成后的代码中选中复选框,我会将数据值添加到表的标题中,从而简化整个操作。
If Me.slideTwo.Checked=True Then GridView1.HeaderRow.Cells(10).Attributes.Add("data-value",selUsers.SelectedItem.Text)
而普雷斯托·切诺,这是一种享受。我仍然不知道为什么在表分类器初始化完成后调用javascript函数实际上不起作用。它将文本设置到过滤器字段中,但不应用它。不过,一旦页面加载,javascript就可以很好地工作。是的,这不起作用。我有两个不同的场景,一个没有保存筛选器,但试图通过fiterTS()设置为加载,另一个有筛选器保存,如果未选中复选框,则尝试在页面加载时清除它。我尝试了很多不同的方法,但都没有产生任何效果。是的,那是行不通的。我有两个不同的场景,一个没有保存筛选器,但试图通过fiterTS()设置为加载,另一个有筛选器保存,如果未选中复选框,则尝试在页面加载时清除它。我尝试了许多不同的方法,但它根本没有产生任何结果。请注意,我的JQuery非常弱。我认为这里的initialize函数执行以下操作:(1)获取我们将要修改的表配置(2)查找第三组的筛选器(3)获取该筛选器的值并将其放入val(4)如果val='something',则设置checked。这是正确的吗?有两点让我很恼火:(1)删除保存的过滤器的代码(当filter\u saveFilters=true)去哪里清除它们并让tablesorter在没有过滤的情况下初始化?我不能相信