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(){ ...
随机推荐
- golang随机数及pipe
var pipe1 = make(chan int, 1000) func piTest(){ for{ data := <- pipe1 fmt.Printf("get data:% ...
- 正则表达式 第五篇:C# 正则表达式
原文:正则表达式 第五篇:C# 正则表达式 本文整理C#正则表达式的元字符,正则表达式是由字符构成的表达式,每个字符代表一个规则,表达式中的字符分为两种类型:普通字符和元字符.普通字符是指字面含义不变 ...
- springCloud的feign异常:RequestHeader参数为空时,对key加了大括号{}
好久没写博客了,今天趁着周末把工作中遇到的问题梳理一下(在这个问题排查过程中,发现自己排查问题的能力还是太弱了,需要加强). 最近在公司springCloud的项目里,通过feign远程调用其他服务, ...
- YoloV3 训练崩溃
经过排查 发现是这里出了问题 然后发现是标注文件里有 x=0 y=0 这样的数据,46_Jockey_Jockey_46_576.txt , 那么肯定是标注文件出了问题!! 删除该标注文件即可. ...
- 安卓SharedPreferences类的使用
package com.lidaochen.phonecall; import android.content.Intent; import android.content.SharedPrefere ...
- Java秒杀实战 (七)安全优化
转自:https://blog.csdn.net/qq_41305266/article/details/81174782 一.隐藏秒杀地址 思路:秒杀开始前,先去请求接口获取秒杀地址 1.接口改造, ...
- Python学习记录6-list、tuple、dict、set复习
数据类型在一门语言中是非常重要的,所以选择再次学习一下加深记忆.本次主要参考了大神廖雪峰的官方网站,非常感谢大神,讲的很清晰,收获很大. 标准数据类型 Number(数字) String(字符串) L ...
- django请求周期和请求信息
Django的请求周期 1,概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页. 那么: Djan ...
- PAT Basic 1052 卖个萌 (20 分)
萌萌哒表情符号通常由“手”.“眼”.“口”三个主要部分组成.简单起见,我们假设一个表情符号是按下列格式输出的: [左手]([左眼][口][右眼])[右手] 现给出可选用的符号集合,请你按用户的要求输出 ...
- C#的Lazy与LazyInitializer
class Program { static void Main(string[] args) { //初始化 Lazy 类的新实例 //当延迟初始化发生时,将使用指定的初始化函数和初始化模式 // ...