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

前端的表单校验场景,如何实现页面滚动到指定报错位置呢,现实是我们可能直接使用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 }):
相关推荐
前端小李子9 小时前
前端环境变量裸奔?我用 EnvShield 给它穿了件防弹衣
前端
youtootech9 小时前
HarmonyOS《柚兔学伴》项目实战25-我的页面、Web 嵌入与项目总结
前端·华为·harmonyos
小林ixn10 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
醇氧11 小时前
CountDownLatch / CyclicBarrier / Semaphore 面试高频问答清单
前端·面试·职场和发展
qetfw12 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
甲维斯12 小时前
我要开始吹牛逼了!Kimi K3 “宇宙无敌”!
前端·人工智能
a11177612 小时前
微光小屋-前端养成小游戏 开源项目
前端
kyriewen13 小时前
我让AI给前端项目做了一次完整的Code Review——它和人类的差距,比我想的大得多
前端·javascript·ai编程