惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
Last Week in AI
Last Week in AI
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
The Cloudflare Blog
罗磊的独立博客
月光博客
月光博客
N
Netflix TechBlog - Medium
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
Jina AI
Jina AI
J
Java Code Geeks

博客园 - Mc525

antv3 x6 基本语法-流程图(二) vue2 element ui el-table大数据处理无分页解决方案-分片加载 vue2 地图热力图 -下钻省市县 三级及地图资源文件 vue2 组件封装 el-select vue2 组件封装 el-input vue2 组件封装 el-date-picker 日期 vue2 scss sass 基础安装包、安装依赖报错 !!! vue2 封装组件使用 v-mode【el-radio,el-input】 Mac Jenkins 环境部署 vue2 按钮权限(七) vue2 换肤(六) vue2 项目实例 国际化(五) vue2 项目实例 动态路由菜单(四) vue2 项目实例 Mock数据模拟(三) vue2 项目实例 Layout布局(二) vue2 项目实例 项目初始化(一) vue2 项目架构--api.js(七) vue2 项目架构--vue.config.js(七) vue2 项目架构--main.js(六)
element ui el-form 表单错误 滚动可视区域
Mc525 · 2025-12-25 · via 博客园 - Mc525
  /**
     * 表单提交处理
     */
    handleSubmit() {
      // 调用 el-form 验证方法
      this.$refs.myForm.validate((valid, errorFields) => {
        if (valid) {
          // 验证通过,执行提交逻辑
          this.$message.success("表单验证通过,即将提交");
          // TODO: 接口请求提交数据
        } else {
          // 验证失败,滚动到第一个错误项
          this.scrollToFirstError(errorFields);
          this.$message.error("表单验证失败,请检查必填项");
        }
      });
    }

滚动错误区域

  /**
     * 滚动到第一个验证错误项
     * @param {Array} errorFields - 验证失败的字段数组(el-form validate 回调返回)
     */
    scrollToFirstError(errorFields) {
      const _errorFields = Object.keys(errorFields) || [];
      if (!_errorFields || _errorFields.length === 0) return;

      // 1. 获取第一个错误字段的 prop
      const firstErrorProp = _errorFields[0];

      // 2. 根据 prop 找到对应的 el-form-item 元素(通过属性选择器)
      const firstErrorItem = document.querySelector(
        `.demo-form [for="${firstErrorProp}"]`
      );

      if (firstErrorItem) {
        // 3. 滚动到错误项可视区域(behavior: 'smooth' 平滑滚动,block: 'center' 居中显示)
        firstErrorItem.scrollIntoView({
          behavior: "smooth", // 平滑滚动(可选:auto 立即滚动)
          block: "center", // 垂直方向居中(可选:start 顶部对齐,end 底部对齐)
          inline: "nearest", // 水平方向不滚动
        });

        // 可选:给错误项添加高亮样式(增强视觉提示)
        this.highlightErrorItem(firstErrorItem);
      }
    },

    /**
     * 错误项高亮提示(可选)
     * @param {Element} errorItem - 错误项 DOM 元素
     */
    highlightErrorItem(errorItem) {
      // 添加高亮样式
      errorItem.style.boxShadow = "0 0 8px rgba(245, 108, 108, 0.5)";
      errorItem.style.borderRadius = "4px";
      // 3秒后移除高亮
      setTimeout(() => {
        errorItem.style.boxShadow = "";
      }, 3000);
    },