element-ui做表单验证 v-for遍历表单 自动生成校验规则 pc移动双适配
整体思路:
1:利用element-ui的栅格实现小分辨率和大分辨率的适配
2:模拟一组数据,从中筛选出 绑定各个表单值的对象 以及生成验证规则对象
3:在script标签内 、data()外,自定义验证规则,这样在created钩子中(也就是生成验证对象时)就可以将这些自定义的规则加入进去
下面是整了一天的代码:
<template>
<div class="box1">
<div style="margin-top:400px;"></div> <el-row>
<el-col :xs="0" :md="3"> </el-col>
<el-col :xs="24" :md="18">
<el-form label-width="100px" ref="formData" :model="formData" :rules="rules">
<div :index="(index+'')" v-for="(item,index) in arrList" :key="item.name">
<el-form-item v-if="item.name=='select'" :prop="item.name" :label="item.name">
<el-select v-model.trim="formData[item.name]"
placeholder="请选择活动区域"
@change="valChange"
style="width:100%;">
<el-option label="请选择" value=""></el-option>
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item v-else-if="item.name=='textarea'" :prop="item.name" :label="item.name">
<el-input type="textarea" v-model.trim="formData[item.name]" @change="valChange"></el-input>
</el-form-item>
<el-form-item v-else :prop="item.name" :label="item.name">
<el-input v-model.trim="formData[item.name]" @blur="valChange"></el-input>
</el-form-item>
</div>
<el-form-item style="text-align:center;">
<el-button type="primary" @click="submitForm('formData')">立即创建</el-button>
<el-button @click="resetForm('formData')">重置</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row> </div>
</template> <script>
// import global from '@/js/global.js';
//自定义校验规则(邮箱)
var checkEmail = (rule, value, callback) => {
const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
if (!value) {
return callback(new Error('邮箱不能为空'));
}
setTimeout(() => {
if (mailReg.test(value)) {
callback()
} else {
callback(new Error('请输入正确的邮箱格式'));
}
}, 100)
}
// 电话验证
var checkPhone = (rule, value, callback) => {
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
if (!value) {
return callback(new Error('电话号码不能为空哦也'))
}
setTimeout(() => {
// Number.isInteger是es6验证数字是否为整数的方法,但是我实际用的时候输入的数字总是识别成字符串
// 所以我就在前面加了一个+实现隐式转换 if (!Number.isInteger(+value)) {
callback(new Error('请输入数字值'))
} else {
if (phoneReg.test(value)) {
callback()
} else {
callback(new Error('电话号码格式不正确'))
}
}
}, 100)
}
export default {
components:{
},
data(){
return {
formData:{},//用于绑定各个表单值的对象
arrList:[],//模拟一个初始化数据
rules:{},//验证规则对象
}
},
created(){
//模拟的假数据
this.arrList=[
{name:"a1",required:1},
{name:"a2",required:0},
{name:"select",required:1},
{name:"email",required:1},
{name:"phone",required:1},
{name:"textarea",required:1},
]
// 用于绑定各个表单值的对象
for(let i=0,len=this.arrList.length;i<len;i++){
var obj={[this.arrList[i].name]:""}
this.formData=Object.assign({},this.formData,obj);
}
console.log(this.formData);
// 生成校验规则对象
for(let i=0,len=this.arrList.length;i<len;i++){
var arrs=[];
if(this.arrList[i].required==1){
var objs={
required: true,
message: this.arrList[i].name+'不能为空',
trigger: 'blur'
};
if(this.arrList[i].name=='select'){
objs={
required: true,
message: this.arrList[i].name+'不能为空',
trigger: 'change'
}
arrs.push(objs);
}else if(this.arrList[i].name=='email'){
arrs.push(objs);
objs={ validator: checkEmail, trigger: 'blur' };//自定义的验证规则
arrs.push(objs);
}else if(this.arrList[i].name=='phone'){
arrs.push(objs);
objs={ validator: checkPhone, trigger: 'blur' };//自定义的验证规则
arrs.push(objs);
}else if(this.arrList[i].name=='textarea'){
arrs.push(objs);
objs={ min: 5, max: 8, message: '长度在 5 到 8 个字符', trigger: 'blur' };//长度验证
arrs.push(objs);
}else{
arrs.push(objs);
} }
this.rules[this.arrList[i].name]=arrs;
}
console.log(this.rules)
},
mounted(){ },
methods:{
//提交事件
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
// 重置事件
resetForm(formName) {
this.$refs[formName].resetFields();
},
// 每个表单的值改变的事件
valChange(val){
console.log(val)
console.log(this.formData)
}
}
}
</script>
增加一个表单验证的正则:
function verifyEmail(email){
var reg = new RegExp(/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/); //邮箱验证
if(reg.test(email)){
return true;
}else{
return false;
}
}
完整邮箱验证:
var validUsername=(rule, value, callback)=>{
var reg = new RegExp(/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/); //邮箱验证
if(value){
if(reg.test(value)){
this.checkEmail(value).then((data=>{
if(data){
callback();
}else{
callback(new Error('邮箱已存在'));
}
}))
}else{
callback(new Error('请输入正确的邮箱地址'));
}
}else{
callback(new Error('请填写邮箱'));
}
}
。
element-ui做表单验证 v-for遍历表单 自动生成校验规则 pc移动双适配的更多相关文章
- js如何遍历表单所有控件
js如何遍历表单所有控件 一.总结 一句话总结: 1.获取form表单里面的的所有元素:通过formelement.elements,这里form元素通过name属性直接定位 var fele=for ...
- element ui form表单清空规则
公司项目重构,经过商定使用element ui.在重构项目的时候发现一下element ui上很蛋疼的东西. 例如,这个form表单就是一个.趁着在高铁上没事,把想写的东西写一下. 先说一下eleme ...
- vue + element ui 阻止表单输入框回车刷新页面
问题 在 vue+element ui 中只有一个输入框(el-input)的情况下,回车会提交表单. 解决方案 在 el-form 上加上 @submit.native.prevent 这个则会阻止 ...
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- vue+element ui 重置表单
<el-dialog :title="addForm.title" :visible.sync="dialogFormVisible" width=&qu ...
- element ui FORM表单
form表单 Form-Item Slot [label] 旧版语法 <el-form-item label="活动名称" prop="name"> ...
- sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期
问题:在数据库脚本开发中,有时需要生成一堆连续数字或者日期,例如yearly report就需要连续数字做年份,例如daily report就需要生成一定时间范围内的每一天日期.而自带的系统表mast ...
- JavaScript遍历表单元素
运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- Jquery 遍历表单 AJAX提交
function test(){ var arrayObj = new Array(); $("#contentTable tbody tr").each(function(){ ...
随机推荐
- jquery tablesorter 动态加载数据时,排序。过滤失效解决方案
解决方案:重置更新: $("table").trigger("update"); 1 官方 ajax表格数据添加实例: $(document).ready(fu ...
- IntelliJ IDEA 搭建 Go 开发环境
本文介绍 Windows7 x64 基于 IntelliJ IDEA 搭建 Go 语言开发环境.主要是一些操作过程截图以及简单文字描述,如有不清楚的地方,欢迎指正.所有软件使用当前(2016.12. ...
- 01 Java 内存分配全面浅析
http://blog.csdn.net/shimiso/article/details/8595564 Java 内存分配全面浅析 本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的 ...
- ASP.NET-A low-level Look at the ASP.NE
请求处理模型1: ******** 1.浏览器向服务器发送请求,先到达服务器的http.sys系统文件,进行初步的处理. (服务器分为内核模式和用户模式,http.sys在内核模式种,IIS在用户模式 ...
- 用表格制作商品购买页面--(table)
实现效果如图: 首先来看布局,头部图片,内容从左到右分为四个部分 勾选+商品图片+商品名/买家+价格, 所以需要将头部用<td>包括起来,并且设置<td colspan=&quo ...
- springboot有第三方jar打包成jar
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...
- Python入门之第三方模块安装
Python入门之第三方模块安装 平台:Win10 x64 + Anaconda3-5.3.0 (+Python3.7.0) Issue说明:pip install line_profiler-2.1 ...
- 怎么解决Win7电脑更新出现80072EE2代码的错误?
我们在使用Win7系统时经常会遇到更新,这些更新可以修复一些系统漏洞,提高系统的安全性.但有时我们在进行相关更新时会出现错误,而导致最后的更新失败.下面好系统重装助手就和大家分享一下Win7系统更新出 ...
- hibernate入门配置及第一个hibernate程序
学习了hibernate后就想先给大家分享一下它的配置方法: jar包导入 一.数据库表的创建 二.开启hibernate配置 编译器:eclipse 数据库:mysql 1.创建第一个xml文件 ...
- 遍历二叉树 - 基于递归的DFS(前序,中序,后序)
上节中已经学会了如何构建一个二叉搜索数,这次来学习下树的打印-基于递归的DFS,那什么是DFS呢? 有个概念就行,而它又分为前序.中序.后序三种遍历方式,这个也是在面试中经常会被问到的,下面来具体学习 ...