表单校验场景,如何实现页面滚动到报错位置

前端的表单校验场景,如何实现页面滚动到指定报错位置呢,现实是我们可能直接使用antd的执行api直接就校验滚动到相应位置,但要是让我们自己实现,会怎么实现呢,虽然这只是一个小功能,但也小小得考验一下我们思路了

实现步骤:

  1. 校验表单,并获取报错表单的信息
  2. 根据报错表单的id等信息获取到表单dom
  3. 直接使用scrollIntoView等滚动到置顶dom的方法就可以滚动到置顶的dom了
  4. 如果是多页签,则直接切换到报错的页签并滚动到指定的位置就行了
js 复制代码
import React from "react";
import { Button, Form, Input } from "antd";

const App = () => {
  const form = Form.useForm();
  //生成默认表单,有利于滚动
  const forms = Array.from({ length: 100 }, (v, k) =>
    (k + "").padStart(3, "0")
  );

  //处理根据错误信息的name,处理滚动到指定节点
  const formErrorHandle = () => {
    form.current
      .validateFields()
      .then((res) => {
        console.log("values", res);
      })
      .catch((err) => {
        const errform = err.errorFields;
        if (errform) {
          const first = errform[0];
          const name = first.name[0];
          const item = form.current.getFieldInstance(name);
          item.nativeElement.scrollIntoView({
            behavior: "smooth",
            block: "center",
          });
        }
      });
  };

  return (
    <div>
      <Button onClick={formErrorHandle}>提交</Button>
      <Form ref={form}>
        {forms.map((item, index) => (
          <Form.Item
            name={item}
            label={item}
            key={index}
            rules={[
              {
                required: index === 80,
              },
            ]}
          >
            <Input />
          </Form.Item>
        ))}
      </Form>
    </div>
  );
};
export default App;

这就是 antd已经提供的方法了,如果项目中非要自定义不适用antd的话,有自己的思路就行,别管实现的优雅不优雅,实现功能才是关键,然后才是借鉴和优化😄

js 复制代码
校验 + 自动滚动到第一个错误字段
form.validateFieldsAndScroll()
validateFields({ scrollToFirstError: true }):
相关推荐
kyriewen11 分钟前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
前端·rust·webassembly
kyriewen1120 分钟前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
开发语言·前端·javascript·后端·性能优化·rust·前端框架
IT_陈寒32 分钟前
SpringBoot自动配置坑了我,原来要这样绕过去
前端·人工智能·后端
东方小月42 分钟前
Claude Code 完整上手指南:MCP、Skills、第三方模型配置一次搞定
前端·人工智能·后端
XZ探长1 小时前
基于 Trae Solo 移动办公修复 Vue3 前端服务问题
前端
蝎子莱莱爱打怪1 小时前
Claude Code 省 Token 小妙招:RTK + Caveman 组合拳
前端·人工智能·后端
Momo__2 小时前
Vue 3.6 Vapor Mode:跳过虚拟 DOM,性能极致优化
前端·vue.js
少年白马醉春风丶2 小时前
从零构建 AIGC 无限画布:AIGCCanvasFlow 技术全解析
前端·后端·aigc
OpenTiny社区2 小时前
生成式 UI 藏大招!看似露营案例,实则电商集成 GenUI SDK 干货
前端·ai编程·交互设计
Awu12272 小时前
🍎Vue官方Skills深度解读:那些被悄悄藏起来的宝藏
前端·aigc·claude