我正在使用带有多个搜索框的数据表,并且启用了stateSave。表确实会保存状态,但重新加载表时,搜索框不会保存。
例如,我有3个专栏...图书作者、书名和图书ISBN。我有一个搜索框为每一列更大的搜索能力。如果我在author中搜索“Mark”,所有在author中带有名称Mark的结果都会出现,这与预期的一样。刷新页面,或执行任何其他将强制重新加载表的操作(如添加一本书),将显示保存的搜索结果,但搜索框为空。要使所有的项目重新出现,我需要到图书作者搜索框并按退格键。
所以...如何保存searchByAuthor文本框的状态?
或者...我如何获得搜索的值,以及它被用在什么列上?如果我能得到它,我就可以重新填充正确的搜索框。
首先,看看这个插件的作者在论坛上发的帖子,他说
这在意料之中。过滤输入不是DataTables所了解的--您可以从这些输入调用column().search()
方法,但它可能来自任何地方),因此它没有(也不能)将值重新插入到输入中的能力。
不过,他也提供了一个解决方案,即使用state.loaded()
API调用获取保存状态的值,从那里您可以获得列搜索框中的值。这样做的方法如下(这里有一个指向state.loaded()
文档的链接,此示例来自于此文档):
$(document).on( 'init.dt', function ( e, settings ) {
var api = new $.fn.dataTable.Api( settings );
var state = api.state.loaded();
var searchText = state.columns[/*columnNumber*/].search;
} );
然后,可以从那里使用searchtext
重新填充字段中的值。有关可以从state
变量获取哪些数据的详细信息,请查看到state()
文档的链接。
查看那些链接如果有什么不清楚的,我解释的大部分内容都是直接从他们那里获得的,并且将会有更详细的解释。