关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

方法使用前需了解:

来自”和“小编的小提示:

首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form。

其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有:

1.使用此方法前检查prop一定必须要写在<el-form-item>上面,写在里面的input上或者其他任何地方都不行(el-form-item prop属性绑定)

2.el-form rules,model属性绑定,ref标识

自定义表单验证的坑:

一.validate/resetFields 未定义。

1:要验证的DOM,还没有加载出来。

2:有可能this.$refs[ruleForm].validate() 方式不识别。需要使用: this.$refs.ruleForm.validate(); 这种方式,不是你们想要的结果。

解决办法:

  1. this.ticketDialog = true;

  2.  

  3.  

    //对整个表单进行重置,将所有字段值重置为初始值并移除校验结果

  4.  

  5.  

    this.$nextTick(function() {

  6.  

  7.  

    this.$refs.ticketInfoForm.resetFields();

  8.  

  9.  

    })

或者:this.$refs[ruleForm].validate() 方式不识别。需要使用: this.$refs.ruleForm.validate();

那么如下所示:

  1. methods: {

  2.  

  3.  

    submitForm(ruleForm2) {

  4.  

  5.  

    //官网 this.$refs[ruleForm2].validate();

  6.  

  7.  

    //在实际使用中,会报错。validate未定义

  8.  

  9.  

    //使用this.$refs.ruleForm2.validate(); 成功。

  10.  

  11.  

    this.$refs[ruleForm2].validate((valid) => {

  12.  

  13.  

    if (valid) {

  14.  

  15.  

    alert(‘submit!‘);

  16.  

  17.  

    } else {

  18.  

  19.  

    console.log(‘error submit!!‘);

  20.  

  21.  

    return false;

  22.  

  23.  

    }

  24.  

  25.  

    });

  26.  

  27.  

    }

  28.  

  29.  

    }

二. 数字类型的验证, 兼容mac和windows系统。

数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符。
如下所示:

  1. <el-form-item label="年龄" prop="age">

  2.  

    <el-input type="number" v-model.number="ruleForm2.age"></el-input>

  3.  

    </el-form-item>

如有不解,可以查看具体案例:

html:

  1. <script src="//unpkg.com/vue/dist/vue.js"></script>

  2.  

    <script src="//unpkg.com/element-ui/lib/index.js"></script>

  3.  

    <div id="app">

  4.  

    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">

  5.  

    <el-form-item label="密码" prop="pass">

  6.  

    <el-input type="password" v-model="ruleForm.pass" auto-complete="off"></el-input>

  7.  

    </el-form-item>

  8.  

    <el-form-item label="确认密码" prop="checkPass">

  9.  

    <el-input type="password" v-model="ruleForm.checkPass" auto-complete="off"></el-input>

  10.  

    </el-form-item>

  11.  

    <el-form-item label="年龄" prop="age">

  12.  

    <el-input type="number" v-model.number="ruleForm.age"></el-input>

  13.  

    </el-form-item>

  14.  

    <el-form-item>

  15.  

    <el-button type="primary" @click="submitForm(‘ruleForm‘)">提交</el-button>

  16.  

    <el-button @click="resetForm(‘ruleForm‘)">重置</el-button>

  17.  

    </el-form-item>

  18.  

    </el-form>

  19.  

    </div>

js:

  1. var Main = {

  2.  

    data() {

  3.  

    var checkAge = (rule, value, callback) => {

  4.  

    if (!value) {

  5.  

    return callback(new Error(‘年龄不能为空‘));

  6.  

    }

  7.  

    setTimeout(() => {

  8.  

    if (!Number.isInteger(value)) {

  9.  

    callback(new Error(‘请输入数字值‘));

  10.  

    } else {

  11.  

    if (value < 18) {

  12.  

    callback(new Error(‘必须年满18岁‘));

  13.  

    } else {

  14.  

    callback();

  15.  

    }

  16.  

    }

  17.  

    }, 1000);

  18.  

    };

  19.  

    var validatePass = (rule, value, callback) => {

  20.  

    if (value === ‘‘) {

  21.  

    callback(new Error(‘请输入密码‘));

  22.  

    } else {

  23.  

    if (this.ruleForm.checkPass !== ‘‘) {

  24.  

    this.$refs.ruleForm.validateField(‘checkPass‘);

  25.  

    }

  26.  

    callback();

  27.  

    }

  28.  

    };

  29.  

    var validatePass2 = (rule, value, callback) => {

  30.  

    if (value === ‘‘) {

  31.  

    callback(new Error(‘请再次输入密码‘));

  32.  

    } else if (value !== this.ruleForm.pass) {

  33.  

    callback(new Error(‘两次输入密码不一致!‘));

  34.  

    } else {

  35.  

    callback();

  36.  

    }

  37.  

    };

  38.  

    return {

  39.  

    ruleForm: {

  40.  

    pass: ‘‘,

  41.  

    checkPass: ‘‘,

  42.  

    age: ‘‘

  43.  

    },

  44.  

    rules: {

  45.  

    pass: [

  46.  

    { validator: validatePass, trigger: ‘blur‘ }

  47.  

    ],

  48.  

    checkPass: [

  49.  

    { validator: validatePass2, trigger: ‘blur‘ }

  50.  

    ],

  51.  

    age: [

  52.  

    { validator: checkAge, trigger: ‘blur‘ }

  53.  

    ]

  54.  

    }

  55.  

    };

  56.  

    },

  57.  

    methods: {

  58.  

    submitForm(ruleForm) {

  59.  

    //官网 this.$refs[ruleForm].validate();

  60.  

    //在实际使用中,会报错。validate未定义

  61.  

    //

  62.  

    //使用this.$refs.ruleForm.validate(); 成功。

  63.  

    this.$refs.ruleForm.validate((valid) => {

  64.  

    if (valid) {

  65.  

    alert(‘submit!‘);

  66.  

    } else {

  67.  

    console.log(‘error submit!!‘);

  68.  

    return false;

  69.  

    }

  70.  

    });

  71.  

    },

  72.  

    resetForm(formName) {

  73.  

    this.$nextTick(function() {

  74.  

    this.$refs[formName].resetFields();

  75.  

    })

  76.  

    }

  77.  

    }

  78.  

    }

  79.  

    var Ctor = Vue.extend(Main)

  80.  

    new Ctor().$mount(‘#app‘)

以上介绍了" (vue.js)element ui 表单验证 this$refs[formName]validate"里面的小坑的问题解答,希望对有需要的网友有所帮助。

原文地址:https://www.cnblogs.com/huge1122/p/11286860.html

时间: 2024-10-23 06:49:25

关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题的相关文章

(vue.js)element ui 表单重置

el-form需要接收一个model,并且需要配合el-form-item一起使用,并且在el-form-item上绑定prop属性,resetField方法才能好使. <el-form :model="addServiceData" ref="addServiceForm"> <el-form-item label="手机号" prop="mobile"> <el-input v-model=&

vue开源Element UI表单设计及代码生成器

在日常的开发工作中,表单开发是较为繁琐且重复的.本文介绍一个我自己写的,提高开发效率的小工具. 1 可视化设计器 设计器基于Element UI ,可通过点击或拖拽的方式设计基本表单, 设计器生成的代码可直接运行在基于 Element 的 vue 项目中. github仓库   https://github.com/JakHuang/form-generator 码云仓库  https://gitee.com/mrhj/form-generator 演示地址 https://mrhj.gitee

Vue如何使用vee-validate表单验证

Vue项目遇到要表单验证了吧,对我来说表单验证是个很纠(dan)结(teng)的内容,各种判断凌乱到飞起.往常使用jquery的validate插件做表单验证方便吧,你也可以在Vue里引入jquery的validate插件(如何引入jquery在我上一篇博文有介绍,点击查看).但是我们是做vue项目也,不到实在解决不了还是建议不要引入,因为Vue自己就有表单验证的插件,那就是vee-validate. 我在这并不是详细讲解vee-validate的使用功能,只是快速了解如何在项目里使用vee-v

js 常用正则表达式表单验证代码

js 常用正则表达式表单验证代码 js 常用正则表达式表单验证代码,以后大家就可以直接使用了. 正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下:测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证.替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字.根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中

表单验证插件之jquery.validate.js

提到表单验证的插件,第一个想到的就是jquery.validate.js,所以小生想在这里稍微详细地说一下这款插件的具体使用方法,便于理解,我直接附上整段demo的代码(没怎么调样式,主要是看js): <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>JQuery表单验证插件jQuery.validate.js</title> <sty

net MVC +Vue.js+Element UI 笔记

最近项目需求要用到Vue 与 Element UI.但是又不想用Node.js.就结合了Net.MVC来做项目开发.故而做个笔记来记录一些遇到的问题和处理思路 用到MVC主要考虑是到 对 Node.js 不是特别了解.不想给自己埋坑. 而且基于MVC的话,能用到MVC的服务器端渲染,Session,验证,路由机制等等还是非常和嗨皮的. 然而集合MVC的话,比较烦的是在做可复用Component和JS文件的封装上没Node.js那么方便. Note:不得不吐槽,Vue.js简直和Flash Fle

angular js h5关于表单验证的例子

angular js表单验证 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <script src="angular.min.js"></script> <link rel="stylesheet" href="

js常用正则表达式表单验证代码

方法一: var re=/正则表达式/; re.test($("txtid").val()) 方法二: $("txtid").val.match(/正则表达式/): 附: 验证数字的正则表达式集(转载) 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证

JS字符串的表单验证

window.onload事件会在页面加载完成后触发. 所以在事件之前应该将所有的定义的值默认为null 在.onload事件事件里面将需要找到定义的值的对应的字符串或者数组找到 验证姓名不能为空 讲提示语放到输入框的后面,所以在输入框<input>后面加了个<span>标签用来接收输出的提示语 验证邮箱里面必须包含@和. else后面是当我们的操作达标时,提示语消失 验证密码必须由数字和字母组成 表单验证是一系列的验证,所以应该定义一个函数来接收验证的值,最后返回结果 只有在所有