直接用 layui.form.val('formFilter') 获取省市区字段值,需确保 select 在 layui-form 容器内、有正确 name 属性、联动时同步清空下级并触发 render 和 change。
直接用 layui.form.val('formFilter') 就能拿到省市区字段的值,前提是这三个 select 都有正确的 name(比如 province、city、area),且整个表单设置了对应的 lay-filter。别手动遍历 DOM 或拼对象,容易漏掉联动清空后的脏值或 checkbox/radio 的聚合逻辑。
常见原因就三个:
select 不在 class="layui-form" 容器内 —— Layui 表单模块只监听这个 class 下的控件select 缺少 name 属性,或者 name 值前后有空格、大小写不一致(比如后端要 province_id,你写了 provinceId)select 的 value,导致提交时仍带着旧值,但 UI 上看不到 —— 这不是拿不到,而是拿了个“幽灵值”每次切换上级时,必须同步做四件事:
$('#city').empty().append('请选择城市') 清空并补默认项$('#city').val('') 把 DOM 的 value 设为空字符串(不是 null 或 undefined)layui.form.render('select') 让 Layui 重绘 UI 状态$('#city').trigger('change'),否则 form.val() 可能读不到最新状态,验证提示也不更新检查两个关键点:
pid 和后端返回的 id 类型是否一致 —— 后端若返回字符串 "110000",过滤时就得用 item.pid === selectedProvinceId,不能写成 == 或转成数字比较pid 字段最稳真正卡住人的从来不是怎么拼 option,而是 DOM、JS 值、Layui 内部状态这三者不同步 —— 尤其是 form.render() 和 trigger('change'),漏一个,form.val() 就可能返回过期数据。