基于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(二)事件机制(2)
Dec 06 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
Oct 17 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
Mar 26 Javascript
jquery仿百度经验滑动切换浏览效果
Apr 14 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
利用node.js本地搭建HTTP服务器
Apr 19 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
JS简单获得节点元素的方法示例
Feb 10 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
Aug 31 Javascript
Javascript原型链及instanceof原理详解
May 25 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
php链式操作的实现方式分析
2019/08/12 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
关于js datetime的那点事
2011/11/15 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
python通过yield实现数组全排列的方法
2015/03/18 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
python 全局变量的import机制介绍
2017/09/07 Python
django文档学习之applications使用详解
2018/01/29 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python实现Restful API的例子
2019/08/31 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
EJB的基本架构
2016/09/22 面试题
电大物流学生的自我评价
2013/10/25 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
党员一句话承诺大全
2014/03/28 职场文书
2015年手术室工作总结
2015/05/11 职场文书
微信搭讪开场白
2015/05/28 职场文书
经营场所使用证明
2015/06/19 职场文书
中学教代会开幕词
2016/03/04 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang