javascript - 找不到匹配记录时,数据表保存状态过滤不再起作用
问题描述
我正在使用最新版本的 DataTables jQuery 插件。我启用了列过滤和列重新排序,并且 stateSave 设置为 true。我能够设置列过滤以保存在页面重新加载时输入到输入字段中的值,即使列被重新排序。
只有一种情况不起作用。当列过滤器没有返回任何结果(没有匹配的记录)并且页面被重新加载时,过滤不会按预期工作:
- 列过滤器输入字段不再按值显示过滤器
- 在过滤器输入字段中输入新值不再过滤表
这是我应用列过滤器的功能:
function fDTApplyColFilters(dtable) {
//searches column on keypress by column filter data
var dtHeader = dtable.$('tr').closest('div.dataTables_scroll');
$('tr:eq(1) th', dtHeader).each(function () {
$('input', dtHeader).keyup(function () {
var i = ($(this).parent().index() + ':visible'); //uses parent().index for compatibility with column drag-drop reordering
if (dtable.column(i).search() !== this.value) {
dtable
.column(i)
.search(this.value)
.draw();
}
});
});
//reloads column filter search values when returning to saved state filtered datatable
var state = dtable.state.loaded();
if (state) {
dtable.columns().eq(0).each(function (i) {
var newindex = dtable.colReorder.transpose(i, 'toOriginal'); //get correct index after any column drag-drop reordering
var colSearch = state.columns[newindex].search;
var inputField = dtHeader.find('input');
if (colSearch.search) {
inputField.eq(i).val(colSearch.search);
}
});
dtable.draw();
}
}
没有控制台日志错误,当我将此代码添加到 if(colSearch.search) 代码部分时,无论表是否返回记录,控制台日志都会返回完全相同的已保存过滤器参数:
if (colSearch.search) {
inputField.eq(i).val(colSearch.search);
console.log(colSearch.search);
console.log(i);
}
当过滤器返回表中的记录时,页面重新加载时一切正常。但是当表中没有与过滤器匹配的记录时,输入字段不再显示过滤器值(即使它们仍然保存并在控制台日志中以相同的方式显示,我无法理解)。并且列过滤器不再在按键时过滤表格。
我附上了一个jsbin示例:
https://jsbin.com/cofexabupu/1/edit?html,css,js,输出
在名称列中输入过滤器值,然后重新加载页面。如果名称存在于表中,列过滤器将保存名称值。如果列中不存在该名称,则列输入过滤器字段不会保存该值并且过滤不再对列起作用,即使在使用清除过滤器按钮后也是如此。
我一直在寻找一段时间,但无法找到有关此问题的任何其他问题。任何帮助将非常感激!
解决方案
我能够从另一个论坛获得帮助。以防万一有人和我有同样的问题,解决方案是以更好的方式选择标题:
var dtHeader = dtable.table().header();
...代替
var dtHeader = dtable.$('tr').closest('div.dataTables_scroll');
并在这里使用 jQuery 选择器:
var inputField = $(dtHeader).find('input');
...代替
var inputField = dtHeader.find('input');
推荐阅读
- android - 当我尝试将数据从一个活动传递到另一个活动时,我的应用程序崩溃了
- node.js - 将 req.body 中的空字符串 ''" 替换为 null/undefined
- java - 将 main 方法中的变量与另一个 Java 方法连接起来
- react-native - AppCenter Yarn 1.19 错误从缓存中获取时完整性不正确
- html - 如何均匀分布
- 使用 Flexbox 的导航栏中的项目?HTML
- javascript - 使用 Javascript 变量设置 HTML 属性?
- java - 如何为不同的屏幕尺寸android studio自动调整imageview的大小?
- snowflake-cloud-data-platform - 运行 SnowSQL 时生成唯一的日志文件
- python - 在pycharm中显示对象属性
- java - 如何在 Spring Boot 应用程序中禁用请求标头上的主机信息验证