详解基于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 相关文章推荐
JS window.opener返回父页面的应用
Oct 24 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
Dec 09 Javascript
jQuery实现可收缩展开的级联菜单实例代码
Nov 27 Javascript
JavaScript使用Replace进行字符串替换的方法
Apr 14 Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 Javascript
EasyUI为Numberbox添加blur事件的方法
Mar 05 Javascript
原生js实现简单的模态框示例
Sep 08 Javascript
浅谈Angular 观察者模式理解
Nov 01 Javascript
node.js ws模块搭建websocket服务端的方法示例
Apr 25 Javascript
vue.js的简单自动求和计算实例
Nov 08 Javascript
jQuery表单校验插件validator使用方法详解
Feb 18 jQuery
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 08 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&amp;mysql(一)
2006/10/09 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
numpy.random模块用法总结
2019/05/27 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
python openpyxl模块的使用详解
2021/02/25 Python
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
年级组长自我鉴定
2014/02/22 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
休学证明范本
2015/06/19 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android