【Vue】element ui 表单验证 this.$refs[formName].validate()里面的内容死活不执行

【Vue】element ui 表单验证 this.$refs[formName].validate()里面的内容死活不执行
123可以打出来,但是函数里面的内容就打不出来,不知道为什么

回答

之前找到原因了,原因是 所有的prop一定必须要写在<el-form-item>上面,写在里面的input上或者其他任何地方都不行

Python后端,最近正在用element ui;
首先确保每个验证函数一定调用了callback()函数,在验证不通过、通过时都要调用callback()函数,这里return callback()callback()都可以;
如果还是有问题,再打印this.$refs[formName]如果为空说明调用或表单有问题。

<script>

import ElCol from "element-ui/packages/col/src/col";

export default {

components: {ElCol},

data() {

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

if (!value) {

return callback(new Error('邮件不能为空'));

}

if (!value.includes('@')) {

return callback(new Error('请输入正确格式的邮箱'));

}

else {

return callback() // 一些同学的问题可能就出在这里

}

};

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

if (value === '') {

return callback(new Error('请输入密码'));

}

else {

return callback() // 还有这里,确保每个验证函数都要有

}

};

return {

loginForm: {

email: '',

pass: '',

},

loginRules: {

email: [

{validator: checkEmail, trigger: 'blur'}

],

pass: [

{validator: validatePass, trigger: 'blur'}

],

}

};

},

methods: {

submitForm(formName) {

console.log(this.$refs[formName])

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

console.log(valid)

if (!valid) {

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

return false;

} else {

console.log('submit')

return true

}

});

},

resetForm(formName) {

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

}

}

}

</script>

vue element-ui使用自定义正则表达式:

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

let regExp = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/

if (value === '') {

callback(new Error('请输入密码'))

} else if (regExp.test(value) === false) {

callback(new Error('8-16字母和数字组成,不能是纯数字或纯英文'))

} else {

if (this.ruleForm.repass !== '') {

this.$refs.ruleForm.validateField('repass')

}

callback()

}

}

注册提交按钮事件:

submitForm (formName) {

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

if (valid) {

let _this = this

this.$ajax.post('请求地址', _this.ruleForm)

.then((response) => {

this.$message.success('注册成功!')

this.$refs[formName].resetFields()

// 跳转到登录页

this.$router.push({path: '/'})

})

} else {

console.log('error submit!!')

return false

}

})

}

全套完整代码:[vuejs+element ui+ssm+maven实现登陆注册功能(有完整源码下载)

你这个,先看看this.$refs[formName]是不是Undefined

我的编辑和新建是同一个弹窗的el-from,刚开始单纯写新建时,没发现问题,加了编辑以后,就有bug了,
bug1:
复现步骤:
1.点击编辑,弹窗显示,内容回显,关闭弹窗
2.点击新建,弹窗显示,显示的是刚刚编辑的内容
bug2:偶尔复现的
点击新建 表单都填写了,点保存按钮,this.$refs[formName].validate((valid) => {可以进来,到那时偏偏valid是false, 第一次进来新建是好的,然后不知道怎么就一直新建不好了,为什么一直是false呢

以下都写了
el-form rules,model属性绑定,ref标识
el-form-item prop属性绑定

检查自定义验证里面,是否使用if elseif 而忽略了最后的else中的callback

以上是 【Vue】element ui 表单验证 this.$refs[formName].validate()里面的内容死活不执行 的全部内容, 来源链接: utcz.com/a/71998.html

回到顶部