所以我认为这可能是数据表lib中的一个错误。我只能使用jsfiddle中的示例代码重现这一点。
重新创建的步骤:
注意:数据表仍然保持过滤状态,但搜索字段现在全部为空。
有没有其他人看过这个或看到我在这里做错了什么?
这是javascript
[InitializeOnLoad]
大部分代码都来自此链接 https://datatables.net/examples/api/multi_filter.html
预期的功能是数据表应该在加载之间保存状态,搜索框应该在页面重新加载时重新加载过滤后的文本。
答案 0 :(得分:3)
这是因为您已启用stateSave
。这会按原样执行列搜索,这是DataTables的内部搜索,但由于您的输入元素是外部的,而DataTables不知道它们,您必须自己填充它们。看看this示例,它在initComplete
:
// Restore state saved values
var state = this.state.loaded();
if (state) {
var val = state.columns[this.index()];
input.val(val.search.search);
}
答案 1 :(得分:0)
因此,结合我的代码和上面的答案,我提出了这个解决方案
$(document).ready(function() {
const table = $('#example').DataTable({
stateSave: true
});
// Setup - add a text input to each footer cell
$('#example tfoot th').each( function (index,value) {
var title = $(this).text();
$(this).html( '<input type="text" placeholder="Search '+title+'" value="'+table.column(index).search()+'"/>' );
} );
// Apply the search
table.columns().every( function () {
var that = this;
$( 'input', this.footer() ).on( 'keyup change', function () {
if ( that.search() !== this.value ) {
that
.search( this.value )
.draw();
}
} );
});
});
这里的主要代码是修复
$(this).html( '<input type="text" placeholder="Search '+title+'" value="'+table.column(index).search()+'"/>' );
首先获取索引值对,同时迭代列
$('#example tfoot th').each( function (index,value)
然后,从上面的答案中窃取,按索引
从列中注入搜索值$(this).html( '<input type="text" placeholder="Search '+title+'" value="'+table.column(index).search()+'"/>' );