级联选择器的 lay-verify 不会自动触发校验,必须通过 form.verify() 注册自定义规则或在 form.on('submit') 中手动获取选中路径数组并判断长度是否达标(如 ≥2)来实现可靠校验。
级联选择器的 lay-verify 不会自动触发校验
直接给 cascader 的容器(比如 <div class="layui-form-item">)加 <code>lay-verify="required" 是无效的。layui 的 form.verify() 机制只监听 <input>、<select></select>、<textarea></textarea> 及其直接父级 <div class="layui-form-item">,但不会读取 <code>cascader 内部选中值——它本质是多个 select 或自定义 dom 拼装的,没有原生表单控件的 value 属性绑定。
必须用自定义规则 + 手动取值方式校验
核心思路:不依赖 lay-verify 自动传参,而是通过 DOM 查询拿到当前选中的路径数组,再判断长度是否达标(通常三级联动要求至少选到“市”或“区”,即长度 ≥ 2 或 ≥ 3)。
- 先确保
cascader容器有唯一标识,例如id="area-cascader"或data-name="area" - 在
form.verify()中注册规则,例如areaComplete,内部用layui.$(或原生document.querySelectorAll)查子节点选中项 - 典型判断逻辑:
layui.$('#area-cascader .layui-cascader-menus .layui-this').length 表示未选满两级 - 若使用懒加载或异步渲染,需等
cascader渲染完成后再执行校验,否则可能查不到.layui-this
常见错误:把校验绑在 select 上反而失效
有人尝试给级联生成的每个 <select></select> 单独加 lay-verify="required",这会导致三个问题:
- 第一个
select(省)被选后就通过,后续两级空着也过检 - 用户切换省份时,城市/区县
select会被清空,但lay-verify不会重新触发 - LayUI 的
select组件在级联场景下实际由 JS 动态控制,DOM 上的value常为初始空值,不可信
提交前手动校验更可靠
最稳的做法是放弃 lay-verify 绑定,改在 form.on('submit') 里做最终检查:
- 用
layui.$('#area-cascader').find('.layui-cascader-value').text()获取显示文本(适用于已渲染完毕的场景) - 或更稳妥地,维护一个全局变量
window.selectedAreaPath = [],在cascader的change回调中更新它 - 提交时检查
selectedAreaPath.length ,然后用 <code>layer.msg()提示并return false - 注意:如果级联数据来自异步接口,要确保
selectedAreaPath已同步更新,避免提交时仍是旧值











