首页 > 其他分享 >Vue element 表单验证不通过时,滚动到校验未通过位置

Vue element 表单验证不通过时,滚动到校验未通过位置

时间:2023-08-28 10:45:19浏览次数:30  
标签:Vue 验证 object 校验 表单 let dom element

我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮。这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应校验不通过的位置。

大致思路

在表单验证方法validate中,提供了两个参数:是否校验成功,和未通过校验的字段规则。

在需要验证的位置加上ref,需要注意,这里的ref需要和prop的值一致。

表单校验逻辑

表单校验中,参数_为校验是否成功字段,参数object为校验规则。当if(_)判断成功时,进入提交逻辑,else则校验失败,调用scrollToView方法,并提示错误信息。其中,scrollToView方法作用就是滚动到对应位置。

/**
 * element 表单多个验证不通过,滚动到验证提示的位置
 * { String } object 验证规则
 * 备注:
 *     1.this.$refs.infoList.validate((_, object)=>{})   返回两个参数,第一个参数:验证是否成功,第二个参数:验证规则
 *     2.验证的标签上添加ref属性,名字和prop值一致。例:<el-form-item :prop="'infoData.' + scope.$index + '.coalName'" :ref="'infoData.' + scope.$index + '.coalName'" ></el-form-item>
 */
export function scrollToView(_this, object) {
  for (let i in object) {
    let dom = _this.$refs[i];
    if (Object.prototype.toString.call(dom) !== "[object Object]") {
      //这里是针对遍历的情况(多个输入框),取值为数组
      dom = dom[0];
    }
    //第一种方法(包含动画效果)
    dom.$el.scrollIntoView({
      //滚动到指定节点
      block: "center", //值有start,center,end,nearest,当前显示在视图区域中间
      behavior: "smooth", //值有auto、instant,smooth,缓动动画(当前是慢速的)
    });

    //第二种方法
    // let top = dom.$el.getBoundingClientRect().top; //获取当前节点的偏移值
    // console.log(top,'top');
    // let scrollTop = document.documentElement.scrollTop; //获取视图滚动值
    // let diff = top + scrollTop;
    // document.documentElement.scrollTop = diff - 276; //276是第一个输入框节点距离顶部的偏移值,也可以在初始化提前保存
    //window.scrollTo(0,diff- 276) //同上
    break; //因为我们只需要检测一项,所以就可以跳出循环了
  }
}

在表单需要校验的位置加上ref

标签:Vue,验证,object,校验,表单,let,dom,element
From: https://www.cnblogs.com/ywjbalabala/p/17661637.html

相关文章

  • vue使用swiper调到指定页(非initialSlide)
    使用swiper的Methods方法watch:{showIndx(n){this.$nextTick(function(){this.$refs.mySwiper.swiper.slideTo(n,1000,true)})},}完整模板代码<template><swiper:options='swiperOption'ref="mySwiper"cl......
  • 鼠标任意拖动元素排列顺序(vue)
    参考地址:https://codesandbox.io/s/condescending-butterfly-enjqpr?file=/src/App.vue <template><div><transition-groupname="drag"class="list"tag="ul"><li@dragstart="dragStart(......
  • vue-颜色选择器(vColorPicker)
      //安装插件//官网:http://vue-color-picker.rxshc.com/npminstallvcolorpicker-S//main.js中全局引入importvcolorpickerfrom'vcolorpicker'Vue.use(vcolorpicker)//在页面中使用<colorPickerv-model="color"v-on:change="he......
  • vue3中使用provide/inject
    父组件<template><hello-world/><button@click="changeMessage">按钮</button></template><scriptsetuplang="ts">importHelloWorldfrom"./components/HelloWorld.vue";import{provide,ref......
  • Vue的使用(2)
    一个简单的Vue项目的创建创建一个UserList.vue组件在App.vue中使用该组件使用组件的第一步,导入组件使用组件的第二部,申明这个组件使用组件的第三步:引用组件结果:事件和插值语法<template><div><!--template只允许有一个唯一的孩子--><h1>这是一个一级标题</h1><di......
  • 动态可编辑表单项
    遇到的问题:业务需要用户输入对应的username以发送私信给指定对象方案1-input输入就完事了缺陷:要输入,麻烦<form><labelfor="recipient-name">发给:</label><inputtype="text"id="recipient-name"></form>方案2-selectthymeleaf模板动态获取后端user......
  • vue2
    介绍Vue.js是什么Vue(读音/vjuː/,类似于view)是一套用于构建用户界面的渐进式框架。Vue被设计为可以自底向上逐层应用。Vue.js使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏......
  • 学生信息登记表单的录入删除代码JS+HTML TOMCAT听课笔记
    <!DOCTYPEhtml><html><head></head><body><formclass="info"autocomplete="off">姓名:<inputtype="text"class="uname"name="uname"&......
  • vue微信H5项目使用腾讯地图获取当前位置经纬度
    1.在index.html引入js文件<scriptsrc="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>2.在需要页面中你自己的key要去腾讯地图工具去申请https://lbs.qq.com/webApi/component/componentGuide/componentPickercreated(){this.getM......
  • vue项目打包之后, 生成一个可修改IP地址的文件
     在做项目的时候遇到了一个问题,就是把项目部署到不同的服务器上,但不能每次修改IP的时候就打包一次,这就增加了前端的工作量,经过百度,发现有一些方法是可以的,亲测可用。具体操作是,1,在static文件夹下面建立一个config.js文件, 1234567(function (){ ......