我对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'吗? 似乎没什么用。
答案 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就可以正常工作。