You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CxJS中ValidationGroup无法识别折叠元素,折叠后误判表单有效

Cx.js折叠面板下ValidationGroup校验失效问题解决

我用可见条件实现了一个可折叠元素,折叠区域内的表单元素需要满足必填校验,因此使用ValidationGroup来确保表单合规。展开状态下校验正常,但折叠区域后,ValidationGroup无法识别区域内的表单,错误判定表单有效。

问题代码示例

import { Button, HtmlElement, TextField, ValidationGroup } from "cx/widgets";

export const App = (
  <cx>
    <Button
      text="Collapse/Expand"
      onClick={(e, { store }) => store.toggle("visibleCondition")}
    />
    <ValidationGroup invalid-bind="invalid">
      <div visible-bind="visibleCondition">
        <TextField label="Label" required asterisk />
      </div>
    </ValidationGroup>
    // 表单为空时应该判定为无效,但折叠后下方文本会错误显示
    <div
      visible-expr="!{invalid}"
      text="This is visible if form is not invalid"
      style="margin-top:20px;"
    />
  </cx>
);

解决方案

问题根源在于visible-bind会在元素不可见时直接从DOM中移除该元素,导致ValidationGroup无法检测到内部的TextField。我们可以通过控制元素的样式来实现折叠效果,保留元素在DOM中的存在,让校验逻辑正常运行。

修改后的代码:

import { Button, HtmlElement, TextField, ValidationGroup } from "cx/widgets";

export const App = (
  <cx>
    <Button
      text="Collapse/Expand"
      onClick={(e, { store }) => store.toggle("visibleCondition")}
    />
    <ValidationGroup invalid-bind="invalid">
      <div style-bind="visibleCondition ? {} : {visibility: 'hidden', height: 0, overflow: 'hidden'}">
        <TextField label="Label" required asterisk />
      </div>
    </ValidationGroup>
    <div
      visible-expr="!{invalid}"
      text="This is visible if form is not invalid"
      style="margin-top:20px;"
    />
  </cx>
);

通过style-bind动态设置visibility: hidden、height: 0和overflow: hidden,元素虽然视觉上不可见,但仍保留在DOM结构中,ValidationGroup就能持续检测内部必填字段的状态,折叠状态下也能正确判定表单有效性。

内容的提问来源于stack exchange,提问作者Stefani Tovilović

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:22:43