正确同步清空表单与表格搜索参数需两步并行:先用form.val()清空已注册字段并form.render()同步UI,再调table.reload({where:{},page:{curr:1}})重置请求参数。
点击工具栏按钮后,表单值清空但表格仍带旧搜索参数?
这是最常被忽略的因果断层:清空 input、select、date 等组件的 ui 和值,不等于清空表格请求时实际发送的 where 参数。layui 表格内部缓存了上次提交的 where,reload 时若不显式覆盖,它就一直带着旧条件发请求。
- 直接调
form.val('searchForm', {})只重置已注册字段,对未在form.render()中声明的字段无效 - 只清 DOM(如
$('#keyword').val(''))却不触发change,form.val()仍读旧值 - 漏掉
page: { curr: 1 },重置后停留在无数据的第 N 页,造成“空白页”错觉
如何正确同步清空表单 + 表格搜索参数
必须两步并行,缺一不可。重点不是“怎么点”,而是“点完之后表格到底发什么请求”。
- 先用
form.val('searchForm', {})清空所有已注册字段,再调form.render()同步 UI(对select、checkbox必须额外form.render('select')等) - 再执行
table.reload('tableId', { where: {}, page: { curr: 1 } })—— 注意where: {}是空对象,不是null或undefined,否则仍继承缓存 - 如果用了 laydate 实例,需提前保存(如
laydateIns = laydate.render({ elem: '#date', ... })),清空时调laydateIns.setValue(''),否则仅清 input 值无法重置内部状态
带清除图标的 input 怎么确保清空后 form.val() 能读到空值
很多人加了 lay-affix="clear" 却发现点完提交还是旧值,问题出在事件链断裂。
- 清除图标点击后,必须执行
inputEl.val('').trigger('change'),不能只改.value - 如果 input 是动态生成的,建议统一委托监听:
$(document).on('click', '.layui-icon-clear', function(){...}),避免重复绑定 - 移动端要扩大热区:给图标外层包一层
span并设padding,禁用display: none控制显隐,改用opacity: 0; visibility: hidden;
为什么 table.cache = [] 不推荐用于“重置搜索”场景
table.cache 直接操作缓存确实快,但它绕过了整个 where 逻辑 —— 这意味着你清空的是“当前显示的数据”,而不是“下一次请求的条件”。它适合纯前端过滤后清屏,不适合对接后端搜索接口的重置。
- 用
table.cache[tableId] = []+table.render(),表格变空,但下次 reload 仍会把旧where带给后端 - 真正的“重置”,目标是让下一次请求变成
GET /api/list?page=1,而不是GET /api/list?keyword=xxx&page=1 - 所以优先走
table.reload({ where: {}, page: { curr: 1 } }),这是唯一能切断请求参数继承链的方式











