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

如何展开折叠面板项并高亮折叠项内未通过的原生输入验证?

折叠面板收起状态下的表单原生验证问题

问题场景

  • 折叠面板内的必填输入框已设置required属性,展开状态下点击提交按钮,空输入会触发原生验证提示Please fill in this field,功能正常
  • 折叠面板处于收起状态时,点击提交按钮无任何验证反应

问题原因

对应HTML元素被设置为visibility: hidden或display: none时,浏览器原生表单验证不会触发。

需求目标

点击提交按钮时,若折叠面板内的必填输入为空,自动展开对应面板并触发原生验证提示。

示例代码

import React, { useState, StrictMode } from "react";
import { Accordion, AccordionItem } from "@carbon/react";
import { createRoot } from "react-dom/client";

const App = () => {
  const [text1, setText1] = useState("");
  const [text2, setText2] = useState("");
  const [toggle, setToggle] = useState(true);

  const toggleHandle = () => {
    setToggle(!toggle);
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log("text1", text1);
  };

  return (
    <>
      <button onClick={toggleHandle}>{toggle ? "collapse" : "expand"}</button>
      <form onSubmit={handleSubmit}>
        <Accordion>
          <AccordionItem title="Title 1" open={toggle}>
            <input
              required
              value={text1}
              onChange={(e) => setText1(e.target.value)}
            />
          </AccordionItem>
          <AccordionItem open={toggle} title="Title 2">
            <input
              required
              value={text2}
              onChange={(e) => setText2(e.target.value)}
            />
          </AccordionItem>
        </Accordion>
        <button type="submit">Submit</button>
      </form>
    </>
  );
};

const root = createRoot(document.getElementById("root"));
root.render(
  <StrictMode>
    <App />
  </StrictMode>
);

临时方案疑问

尝试过通过添加自定义错误并在setTimeout中调用的临时方案,但不确定是否为最优解,且该方案仅支持单个输入,而实际场景中有多个必填输入。请问是否需要为每个输入单独配置,或者存在更通用的解决方案?

内容的提问来源于stack exchange,提问作者FD3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:42:44