提问者:小点点

保存/还原数据表中的搜索值


我正在使用带有多个搜索框的数据表,并且启用了stateSave。表确实会保存状态,但重新加载表时,搜索框不会保存。

例如,我有3个专栏...图书作者、书名和图书ISBN。我有一个搜索框为每一列更大的搜索能力。如果我在author中搜索“Mark”,所有在author中带有名称Mark的结果都会出现,这与预期的一样。刷新页面,或执行任何其他将强制重新加载表的操作(如添加一本书),将显示保存的搜索结果,但搜索框为空。要使所有的项目重新出现,我需要到图书作者搜索框并按退格键。

所以...如何保存searchByAuthor文本框的状态?

或者...我如何获得搜索的值,以及它被用在什么列上?如果我能得到它,我就可以重新填充正确的搜索框。


共1个答案

匿名用户

首先,看看这个插件的作者在论坛上发的帖子,他说

这在意料之中。过滤输入不是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()文档的链接。

查看那些链接如果有什么不清楚的,我解释的大部分内容都是直接从他们那里获得的,并且将会有更详细的解释。