方法使用前需了解:

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

首先打印一下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"里面的小坑的问题解答,希望对有需要的网友有所帮助。

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

  1. element-ui的表单验证this.$refs[formName].validate的代码不执行

    经过排查,如果自定义验证中,每种情况都要写明确和有回调函数callback var validatePhone = (rule, value, callback) => { const reg ...

  2. (vue.js)element ui 表单重置

    el-form需要接收一个model,并且需要配合el-form-item一起使用,并且在el-form-item上绑定prop属性,resetField方法才能好使. <el-form :mo ...

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

    在日常的开发工作中,表单开发是较为繁琐且重复的.本文介绍一个我自己写的,提高开发效率的小工具. 1 可视化设计器 设计器基于Element UI ,可通过点击或拖拽的方式设计基本表单, 设计器生成的代 ...

  4. vue踩坑:vue+ element ui 表单验证有值但验证失败。

    一.如图:有值但是验证失败 二. <el-form :model="form" :rules="rules"> <el-form-item l ...

  5. vue+element 动态表单验证

    公司最近的项目有个添加动态表单的需求,总结一下我在表单验证上遇到的一些坑. 如图是功能的需求,这个功能挺好实现的,但是表单验证真是耗费了我一些功夫. vue+element在表单验证上有一些限制,必须 ...

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

    Vue项目遇到要表单验证了吧,对我来说表单验证是个很纠(dan)结(teng)的内容,各种判断凌乱到飞起.往常使用jquery的validate插件做表单验证方便吧,你也可以在Vue里引入jquery ...

  7. js/jquery/插件表单验证

    媳妇要学js,就收集一些资料给她. 1.js 表单验证 : http://hi.baidu.com/yanchao0901/item/161f563fb84ea5433075a1eb 2.jquery ...

  8. 如何在Vue的项目里对element的表单验证进行封装

    介绍需求 熟悉并优化公司项目的第五天,领导说能不能把表单验证封装一下,我打开代码一看 由于是后台管理系统,无数个需要验证的输入框,由于截图长度受限,只能展示部分,类似于这种页面还有无数个!代码重复率非 ...

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

    提到表单验证的插件,第一个想到的就是jquery.validate.js,所以小生想在这里稍微详细地说一下这款插件的具体使用方法,便于理解,我直接附上整段demo的代码(没怎么调样式,主要是看js): ...

随机推荐

  1. string库

    Lua字符串库小集 1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度: 2). string.rep(s,n) 返回字符串s重复n次的 ...

  2. C# 操作地址 从内存中读取写入数据(初级)

    本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是  CE. 由于每次启动游戏, 游戏中阳光 ...

  3. Python学习笔记:利用爬虫自动保存图片

    兴趣才是第一生产驱动力. Part 1 起先,源于对某些网站图片浏览只能一张一张的翻页,心生不满.某夜,冒出一个想法,为什么我不能利用爬虫技术把想看的图片给爬下来,然后在本地看个够. 由此经过一番初尝 ...

  4. HTML5中新增加的结构元素、网页元素和全局属性

    HTML5新增的结构元素(新增的都是块元素,独占一行) 1) header 定义了文档的头部区域 <header> <h1>网站标题<h1> </header ...

  5. Vue中的key到底有什么用?

    key是为Vue中的vnode标记的唯一id,通过这个key,我们的diff操作可以更准确.更快速 diff算法的过程中,先会进行新旧节点的首尾交叉对比,当无法匹配的时候会用新节点的key与旧节点进行 ...

  6. java基础4(线程)

    1.请简单描述什么是并行,什么是并发? 并行:指两个或多个事件在同一时刻发生(同时发生). 并发:指两个或多个事件在同一个时间段内发生. 通俗易懂版: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去 ...

  7. vue访问本地文件404

    用了vue cli3.0用axios调用本地json数据一直报404,找了半天郁闷,最后发现原因是,vue cli3.0 public 文件夹才是静态资源文件,问题解决,记录一下,以后不再踩坑.

  8. IIS 6.0 PUT上传 任意文件创建漏洞

    IIS 6.0 PUT上传 任意文件创建漏洞 require 1.IIS Server在Web服务扩展中开启了WebDAV. 2.IIS配置了可以写入的权限,包括网站 1.根目录 2.子文件夹 3.i ...

  9. OSCP-FristiLeaks

    环境搭建 靶机下载: https://www.vulnhub.com/entry/fristileaks-13,133/ 安装:直接用virtualbox打开 网络桥接 找到靶机IP 虚拟机启动就显示 ...

  10. 记录-Intellij Idea下以Tomcat运行Web项目时的位置问题

    今天本来准备把原来的一个Web项目导入到Idea下,之前这个项目是用eclipse写的,容器用的tomcat,首先导入前我把一些没用的配置文件都给删了,像什么.eclipse..setting什么的, ...