基于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 相关文章推荐
JQuery为textarea添加maxlength属性的代码
Apr 07 Javascript
jQuery 定时局部刷新(setInterval)
Nov 19 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
May 19 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
跟我学习javascript的var预解析与函数声明提升
Nov 16 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
Jul 24 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
整理关于Bootstrap过渡动画的慕课笔记
Mar 29 Javascript
如何在vue里添加好看的lottie动画
Aug 02 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
解决Vue中使用keepAlive不缓存问题
Aug 04 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设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
TensorFlow损失函数专题详解
2018/04/26 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
函数指针的定义是什么
2016/08/14 面试题
自动化专业毕业生自荐信
2013/11/01 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
初中校园广播稿
2014/02/02 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
玄武湖导游词
2015/02/05 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL