详解基于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 基于面向对象的javascript
Feb 16 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
node.js 抓取代理ip实例代码
Apr 30 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
JS中的回调函数实例浅析
Mar 21 Javascript
JS实现对json对象排序并删除id相同项功能示例
Apr 18 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
微信小程序引入VANT组件的方法步骤
Sep 19 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 判断服务器操作系统的类型
2014/02/17 PHP
详解php中反射的应用
2016/03/15 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
Python实现批量修改文件名实例
2015/07/08 Python
Python+django实现文件上传
2016/01/17 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
高中生自我评语大全
2014/01/19 职场文书
大学军训感言200字
2014/02/26 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
医院义诊活动总结
2014/07/04 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书