基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)


Posted in Javascript onApril 04, 2019

前言

开发过程中遇到了一个需求,根据用户选择的联系方式,动态改变输入框的检验条件,并且整个表单是可以增加的

在线访问:动态表单校验

github(欢迎star): https://github.com/Mrblackant. ..

基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)

思考几个问题

1.整个表单是可新增的,所以要遍历生成;

2.联系方式(手机/座机)的切换,是要切换后边不同类型输入框还是只改变校验规则(本篇是动态改变校验规则)

实现

1.elementui的form表单实现校验的时候要给当前el-form-item加上prop属性,因为我们是遍历生成的表单,那我们的写法就要写成:

重点在prop属性

<template v-for="(k,index) in formData.lists">
 <el-form-item
 :ref="index+'concatValue'"
 :prop="'lists.' + index +'.concatValue'"
 :rules="k.rules">
 <el-input v-model="k.concatValue"></el-input>
 </el-form-item>
</template>

2.因为我选择了根据类型动态修改校验规则,而不是切换不同类型的输入框,

注意看下上文代码中的ref和rules,当类型切换时,对应的:rules=k.rules对应的规则也会进行修改,:ref属性是为了切换联系方式类型时,先清除掉之前的提示。

看下不同类型的校验规则,统一的先放到一个地方:

inputRules: {//设置好需要的校验规则
  telephone: { pattern: /^1[3-9]\d{9}$/, message: '手机号格式错误', trigger: 'blur' },
  phone: { pattern: /^\d{10,12}$/, message: '座机号格式错误', trigger: 'blur' },
  QQ: { pattern: /^[1-9][0-9]{4,14}$/, message: 'QQ格式错误', trigger: 'blur' },
  mail: { pattern: /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/, message: '邮箱格式错误', trigger: 'blur' }
  },

3.如果你的联系方式的值都是必填的,可以先写一个统一的必填校验,省的在步骤2代码里重复写

const baseRule = [
 { required: true, message: '请填写联系方式', trigger: 'blur' }
]

然后等切换校验类型的时候,把必填校验baseRule连接起来:

// 给表单加上新的校验
  this.formData.lists[index].rules = [this.inputRules[data]].concat(baseRule)

动态表单校验、动态校验规则这块没有太难的地方,就是有时候会被绕晕,所以拿出来记录一下,大家有更好的方案欢迎指出

总结

以上所述是小编给大家介绍的基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
把input初始值不写value的具体实现方法
Jul 04 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
使用jquery获取网页中图片高度的两种方法
Sep 26 Javascript
JavaScript中的类(Class)详细介绍
Dec 30 Javascript
JavaScript学习笔记之内置对象
Jan 22 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
深入理解JavaScript程序中内存泄漏
Mar 17 Javascript
JavaScript数组合并的多种方法
May 22 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 #Javascript
JavaScript多种页面刷新方法小结
Apr 04 #Javascript
详解easyui 切换主题皮肤
Apr 04 #Javascript
jQuery分组选择器简单用法示例
Apr 04 #jQuery
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 #Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 #jQuery
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 #Javascript
You might like
php微信支付接口开发程序
2016/08/02 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
原生js开发的日历插件
2017/02/04 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
js实现左右轮播图
2020/01/09 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python中__call__用法实例
2014/08/29 Python
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
生物科学专业自荐书
2014/06/20 职场文书
物理课外活动总结
2014/08/27 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
会议主持人开场白台词
2015/05/28 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
病假证明模板
2015/06/19 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
教你利用python实现企业微信发送消息
2021/05/23 Python
教你用python实现12306余票查询
2021/06/30 Python
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技