form.val()是唯一可靠方式,别用form.reset();必须配合form.render()刷新UI,对select/date/checkbox等组件需分别调用对应render方法并确保事件触发。
layui 的 form.reset() 只触发原生重置,对 select、checkbox、date 等封装组件完全无效。点完按钮发现下拉框还挂着旧值、日期没变、开关仍开着——这就是典型表现。
必须用 form.val() 批量写空:
lay-filter="searchForm",然后调 form.val('searchForm', {})
form.val(null, {})(Layui 2.8+ 支持)清空当前页所有已渲染表单UI 清了但 form.val() 拿不到新值,90% 是因为没触发同步事件。Layui 表单值缓存完全依赖 input 或 change 事件,手动改 DOM 值却不发事件,模块就认为“值没变”。
常见错误写法:$('#name').val('') 或 inputEl.value = '' —— 这些都不够。
正确做法:
form.val('filter', { name: '' }),它内部自动触发所需事件inputEl.dispatchEvent(new Event('input')) 或 $(inputEl).trigger('change')
$(document).on('click', '.layui-icon-clear', handler)
Layui 的 select、date、checkbox 不是真实 input 元素,它们的值存在内部模型里,直接设 value="" 或 val('') 无法同步 UI。
必须按控件类型分别处理:
select:先 form.val('filter', { field: '' }),再 form.render('select')
date:先清空输入框 $('#date').val(''),再调 laydateIns.setValue('')(需提前保存实例)或重 rendercheckbox:用 form.val('filter', { field: [] }),再 form.render('checkbox')
form.val('filter', {}),但注意它只影响已注册字段名form.val() 和 form.render() 都不会自动清除校验痕迹。输入框可能还是红色边框、错误提示没消失、提交按钮仍 disabled —— 这些不是 bug,是设计如此。
需要额外处理:
$('input').removeClass('layui-form-danger')
$('.layui-form-error').remove()
$('#submitBtn').prop('disabled', false)
lay-verify,下次提交时会重新校验;想立刻重验,调 form.validate('filter')
最易被忽略的是:重置按钮本身必须写成 <button type="button">。放在 <form> 里却没设 type,点一下就触发表单提交,整个页面刷新或跳转。