详解基于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 相关文章推荐
JQuery AJAX提交中文乱码的解决方案
Jul 02 Javascript
Safari5中alert的无限循环BUG
Apr 07 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
JavaScript中的对象的extensible属性介绍
Dec 30 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
Aug 21 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
Jun 20 jQuery
layer实现弹出层自动调节位置
Sep 05 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
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python输入二维数组方法
2018/04/13 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
set在python里的含义和用法
2019/06/24 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
副厂长岗位职责
2014/02/02 职场文书
社会学专业求职信
2014/02/24 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
党员一帮一活动总结
2014/07/08 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
Redis+AOP+自定义注解实现限流
2022/06/28 Redis