详解基于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 相关文章推荐
9个JavaScript评级/投票插件
Jan 18 Javascript
JavaScript中的this实例分析
Apr 28 Javascript
$.getJSON在IE下失效的原因分析及解决方法
Jun 16 Javascript
jQuery使用ajaxSubmit()提交表单示例
Apr 04 Javascript
js数组与字符串的相互转换方法
Jul 09 Javascript
javascript实现简单的二级联动
Mar 19 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 Javascript
小程序使用分包的示例代码
Mar 23 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 Javascript
js实现盒子移动动画效果
Aug 09 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基础陷阱题(变量赋值)
2012/09/12 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
Python 字符串操作方法大全
2014/03/11 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python处理Excel文件实例代码
2017/06/20 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
Python入门学习指南分享
2018/04/11 Python
Python按钮的响应事件详解
2019/03/04 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
详解Scrapy Redis入门实战
2020/11/18 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
司机的工作范围及职责
2013/11/13 职场文书
纪律教育月活动总结
2014/08/26 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏