如何使用 VeeValidate 在 onblur 事件时停止验证
How to stop validation while onblur event using VeeValidate
我正在使用 VeeValidate v3 and coreui。
我的问题是如何避免在 onblur 事件时进行验证并仅在 onsubmit 事件时使用 VeeValidate 允许?
<template>
<div class="d-flex align-items-center min-vh-100">
<CContainer fluid>
<CRow class="justify-content-center">
<CCol md="6">
<CCard class="mx-4 mb-0">
<CCardBody class="p-4">
<ValidationObserver v-slot="{ invalid }" ref="form" :disabled="true">
<CForm novalidate @submit.prevent="onSubmit" class="sign">
<h2 class="aligncenter my-5">Create Account</h2>
<ValidationProvider name="FirstName" rules="required" v-slot="{ errors }">
<CInput v-bind:class="{InputError:errors.length > 0}"
label="FirstName"
placeholder="First Name"
:description="errors[0]"
v-model="form.name.firstName" type="text"
/>
</ValidationProvider>
<ValidationProvider name="LastName" rules="required" v-slot="{ errors }">
<CInput v-bind:class="{InputError:errors.length > 0}"
label="LastName"
placeholder="Last Name"
:description="errors[0]"
v-model="form.name.lastName" type="text"
/>
</ValidationProvider>
...
<div class="flex flex-center">
<CButton class="login-btn btn-lg f-w my-3" :disabled="invalid" color="success" label="Login" @click="register" >SIGN UP</CButton>
</div>
</CForm>
</ValidationObserver>
<p class="aligncenter mt-10">Already a user? <router-link to="/login"><span class="text-success"><strong>SIGIN IN</strong></span></router-link></p>
</CCardBody>
</CCard>
</CCol>
</CRow>
</CContainer>
</div>
</template>
export default {
name:"LoginPage",
data() {
return {
form: {
name:{
firstName:"",
lastName:"",
}
...
};
},
methods: {
...
async register() {
this.$refs.form.validate().then(async success => {
if (!success) {
return;
}
var result = await this.registerUser(this.form);
if (!result.success) {
this.$toasted.error(result.message?result.message:"Some error occur");
}
});
}
}
};
</script>
正如您在图片中看到的那样,如果用户不再输入文本,就会进行验证,但理想情况下,只有在用户单击注册按钮时才会进行验证。
在尝试硬编码后我无法弄清楚这一点。
感谢您帮我解决这个问题。
vee-validate v3 中有一个称为“交互模式”的功能,允许您自定义何时验证您的字段。
您正在寻找的是 passive
mode,它仅在提交时验证。
我正在使用 VeeValidate v3 and coreui。
我的问题是如何避免在 onblur 事件时进行验证并仅在 onsubmit 事件时使用 VeeValidate 允许?
<template>
<div class="d-flex align-items-center min-vh-100">
<CContainer fluid>
<CRow class="justify-content-center">
<CCol md="6">
<CCard class="mx-4 mb-0">
<CCardBody class="p-4">
<ValidationObserver v-slot="{ invalid }" ref="form" :disabled="true">
<CForm novalidate @submit.prevent="onSubmit" class="sign">
<h2 class="aligncenter my-5">Create Account</h2>
<ValidationProvider name="FirstName" rules="required" v-slot="{ errors }">
<CInput v-bind:class="{InputError:errors.length > 0}"
label="FirstName"
placeholder="First Name"
:description="errors[0]"
v-model="form.name.firstName" type="text"
/>
</ValidationProvider>
<ValidationProvider name="LastName" rules="required" v-slot="{ errors }">
<CInput v-bind:class="{InputError:errors.length > 0}"
label="LastName"
placeholder="Last Name"
:description="errors[0]"
v-model="form.name.lastName" type="text"
/>
</ValidationProvider>
...
<div class="flex flex-center">
<CButton class="login-btn btn-lg f-w my-3" :disabled="invalid" color="success" label="Login" @click="register" >SIGN UP</CButton>
</div>
</CForm>
</ValidationObserver>
<p class="aligncenter mt-10">Already a user? <router-link to="/login"><span class="text-success"><strong>SIGIN IN</strong></span></router-link></p>
</CCardBody>
</CCard>
</CCol>
</CRow>
</CContainer>
</div>
</template>
export default {
name:"LoginPage",
data() {
return {
form: {
name:{
firstName:"",
lastName:"",
}
...
};
},
methods: {
...
async register() {
this.$refs.form.validate().then(async success => {
if (!success) {
return;
}
var result = await this.registerUser(this.form);
if (!result.success) {
this.$toasted.error(result.message?result.message:"Some error occur");
}
});
}
}
};
</script>
正如您在图片中看到的那样,如果用户不再输入文本,就会进行验证,但理想情况下,只有在用户单击注册按钮时才会进行验证。
在尝试硬编码后我无法弄清楚这一点。
感谢您帮我解决这个问题。
vee-validate v3 中有一个称为“交互模式”的功能,允许您自定义何时验证您的字段。
您正在寻找的是 passive
mode,它仅在提交时验证。