详解基于element的区间选择组件校验(交易金额)


Posted in Javascript onJanuary 07, 2021

需求:

这里以项目的需求为例,基本的需求如下:

  1. 分为左右值,包含左右值,正整数
  2. 左侧必须大于等于1,右侧无限大,右侧值必须不小于左侧
  3. 左侧填写数据,右侧标为必填;右侧填写数据,左侧标为必填
  4. 失焦校验成果:

详解基于element的区间选择组件校验(交易金额)

代码如下:(页面)

<el-col :span="8" v-if="item.qttccType === 1"> 
 <el-col :span="14">
  <el-form-item :label="item.qttccName" :prop="'list.'+ index + '.startNum'" :rules="item.qttccName === '交易金额' ? startMoneyRule(tIndex) : []">
   <el-input v-model.number="item.qttcStartNum" style="width: 100%;" @change="handleMinChange(index)"></el-input>
  </el-form-item>
 </el-col>
 <el-col :span="10">
  <el-form-item label="~" label-width="10px" :prop="'list.'+ index + '.qttcEndNum'" :rules="item.qttccName === '交易金额' ? endMoneyRule(tIndex) : []">
   <el-input v-model.number="item.qttcEndNum" style="width: 60%;" @change="handleMaxChange(index)"></el-input>
  </el-form-item>
 </el-col>
</el-col>

主要思路:

  • 单个表单校验:左侧填写数据,右侧标为必填;右侧填写数据,左侧标为必填、正整数校验、区间校验
  • 关联校验:右侧阈值不得小于左侧阈值

根据上面的思路,单个表单的校验属于公共校验方法,关联校验需要分别校验(因为对比对象不同,且提示语不同),由此在自定义校验中有了如下定义:

公共校验方法:正整数校验、区间校验

validateCom(rule, value, callback) {
   const MIN_NUMBER = 1
   const one = Number(value)
   if (Number.isInteger(one)) {
    if (one < MIN_NUMBER) {
     return callback(new Error('输入值必须大于0'))
    } else if (one.length > 50) {
     callback(new Error('最大长度为50位'))
    }
    return callback()
   }
   return callback(new Error('请输入数字值'))
  }

关联校验:

startMoneyRule(index) {
   const validateMin = (rule, value, callback) => {
    const one = Number(value)
    const max = Number(this.form.list[index].qttcEndNum)
    if (!max || one < max) {
     return callback()
    }
    return callback(new Error('输入值不得大于最大阈值'))
   }
   const R = []
   R.push({ required: false, message: '请填写交易金额最小值', trigger: 'blur' },
    { validator: this.validateCom, trigger: 'blur' },
    { validator: validateMin, trigger: 'blur' })
   return R
  },
  endMoneyRule(index) {
   const validateMax = (rule, value, callback) => {
    const one = Number(value)
    const min = Number(this.form.list[index].qttcStartNum)
    if (!min || one > min) {
     return callback()
    }
    return callback(new Error('输入值不得小于最小阈值'))
   }
   const R = []
   R.push({ required: false, message: '请填写交易金额最大值', trigger: 'blur' },
    { validator: this.validateCom, trigger: 'blur' },
    { validator: validateMax, trigger: 'blur' })
   return R
  }

填坑(重点)

很显然,左侧值是小于右侧值的,但是校验提示仍然报错。究其原因,还是关联校验的问题。既然是关联交验,改变其中一个时应该会重新校验两个。很简单,在input改变时,重新校验表单不就OK了吗

handleMinChange(index) {
   this.$refs.form.validateField('list.' + index + '.qttcEndNum')
  },
  handleMaxChange(index) {
   this.$refs.form.validateField('list.' + index + '.qttcStartNum')
  }

大功告成,忘说了。我的表单是动态从后台获取的,所以校验rules是动态加的!!!

到此这篇关于详解基于element的区间选择组件校验(交易金额)的文章就介绍到这了,更多相关element 区间选择组件校验内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
图片之间的切换
Jun 26 Javascript
使用onbeforeunload属性后的副作用
Mar 08 Javascript
javascript实现简单的贪吃蛇游戏
Mar 31 Javascript
jquery实现顶部向右伸缩的导航区域代码
Sep 02 Javascript
jquery简单倒计时实现方法
Dec 18 Javascript
如何使用AngularJs打造权限管理系统【简易型】
May 09 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
微信小程序富文本渲染引擎的详解
Sep 30 Javascript
Vue框架里使用Swiper的方法示例
Sep 20 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
JS获取当前时间戳方法解析
Aug 29 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 #Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 #Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 #Vue.js
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 #Javascript
JavaScript实现滑块验证解锁
Jan 07 #Javascript
js删除指定位置超链接中含有百度与360的标题
Jan 06 #Javascript
基于element-ui封装表单金额输入框的方法示例
Jan 06 #Javascript
You might like
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
python的urllib模块显示下载进度示例
2014/01/17 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
利用python爬取有道词典的方法
2020/12/08 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
电大本科自我鉴定
2014/02/05 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
文明市民先进事迹
2014/05/15 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
小学思想品德教学反思
2016/02/24 职场文书
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技