基于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 相关文章推荐
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
Aug 27 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
不想让浏览器运行javascript脚本的方法
Nov 20 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
Nov 09 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
Apr 25 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
全面分析JavaScript 继承
May 30 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
在vue中阻止浏览器后退的实例
Nov 06 Javascript
js实现图片粘贴到网页
Dec 06 Javascript
记录一次websocket封装的过程
Nov 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php &amp;&amp; 逻辑与运算符使用说明
2010/03/04 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
使用PHP开发留言板功能
2019/11/19 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
python生成器的使用方法
2013/11/21 Python
python操作gmail实例
2015/01/14 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python程序 创建多线程过程详解
2019/09/23 Python
python实现图像拼接
2020/03/05 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
python怎么删除缓存文件
2020/07/19 Python
python实现单机五子棋
2020/08/28 Python
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
内容编辑个人求职信
2013/12/10 职场文书
旅游个人求职信范文
2014/01/30 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
优秀团队申报材料
2014/12/26 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
员工担保书范本
2015/09/22 职场文书