重置按钮必须用 type="button" 并手动清空数据与 UI;form.val() 清值、form.render() 刷新 UI,二者缺一不可;含 laydate 需额外清 input 和实例值;动态表单需确保模块加载、DOM 挂载、lay-filter 一致;表格搜索需 table.reload({where: {}}) 同步清条件。
重置按钮必须用 type="button",不能依赖 type="reset"
浏览器原生 type="reset" 会清空 dom 值,但 layui 的 select、checkbox、radio 是隐藏原生元素后重绘的 ui,原生重置对它们完全无效——ui 看起来还是旧值。更麻烦的是,如果表单在 <form> 标签内且没写 type,点击默认触发 submit,页面跳转或刷新就发生了。
正确做法是显式声明:<button type="button" id="resetSearch">重置</button>,再手动控制清空逻辑。
form.val() 清数据 + form.render() 刷 UI,两步缺一不可
form.val('filterName', {}) 是清空整个表单字段值的最简方式,但它只改数据层,不更新美化后的下拉框、开关等视觉状态;form.render() 只负责重绘 UI,但不会动你已设的值。两者必须配合,顺序不能反。
- 先调
form.val('searchForm', {})—— 清掉所有已注册字段(name属性匹配的)的值 - 再调
form.render()或更精准的form.render('select', 'searchForm')—— 同步刷新对应区域 UI - 若表单含日期控件(
laydate),需额外对input元素调.val('')并执行laydateIns.setValue('')
动态生成表单时,form.render() 容易失效的三个原因
常见现象:点了重置按钮,select 还是原来选项,甚至整个表单样式错乱。大概率不是代码写错,而是渲染时机或作用域问题。
- 没加载
form模块:layui.use(['form'], function(){...})必须包裹所有相关操作,否则form对象是undefined - DOM 尚未挂载就调了
form.render():比如在$.get()回调里拼完 HTML 后立刻渲染,但元素还没插入页面,form.render()找不到目标 -
lay-filter值不一致:HTML 中<form lay-filter="searchForm">,而 JS 里写成form.val('search-form', {})(多了短横线),字段名对不上,清空就静默失败
表格搜索区域重置时,别漏掉 table.reload({ where: {} })
表单重置只是清 UI 和本地数据,Layui 表格的搜索结果是靠 where 参数驱动的。如果只清表单不重载表格,用户看到的还是旧数据。
务必在重置逻辑末尾加:
table.reload('dataTable', {
where: {}
});
注意:where: {} 是清空查询条件,不是 where: null 或删掉该字段——后者会被忽略,条件依然存在。
复杂点在于:如果搜索表单字段和表格列字段名不一致(比如表单用 userName,表格查 user_name),重置时得手动映射,form.val() 不会帮你做这层转换。


















