0

    <button type="submit"
                      class="register-button"
                      :class="(isDisabled) ? '' : 'selected'"
                      :disabled='isDisabled'
                      v-on:click=" isFirstScreen"
                      @click="persist" >
                      PROCEED
   </button>

email:'',
maxemail:30,
 
   validationStatus: function (validation) {
      return typeof validation != "undefined" ? validation.$error : false;
    },
    
 computed: {
    isDisabled: function(){

      return (this.fullname  <= this.max) || (this.mobile.length < this.maxmobile)
      || (this.gstin.length < this.maxgstin) ||
       (this.email <= this.maxemail) || !this.terms || !(this.verified == true );
     
}

    isEmail(e) {

      if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value))
      {
        this.msg['email'] = '';
      } else{
        this.msg['email'] = 'Invalid Email Address';
      } 
    
      
    },
 <input
                      type="email"
                      v-model.trim="$v.email.$model"
                      v-validate="'required'"
                      :class="{ 'is-invalid': validationStatus($v.email) }"
                      name="email"
                      class=" input-section"
                      placeholder="Enter your company email ID"
                      :maxlength="maxemail"
                      v-on:keypress="isEmail($event)"
                       id='email'  v-model='email'
                    />
   <div v-if="!$v.email.required" class="invalid-feedback">
                      The email field is required.
                    </div>
                 
                    <div v-if="!$v.email.maxLength" class="invalid-feedback-register">
                       30 characters only
                      {{ $v.user.password.$params.maxLength.min }} 
                    </div>

Currently i am unable to validate the email address, even if i enter 2 or 3 characters button is enabling and moving to next page. I want to disable button until user enter valid email address. Can some one help me on this, to solve the issue for the above code. https://vuejsdevelopers.com/2018/08/27/vue-js-form-handling-vuelidate/

2
  • Can you checkout link for vuelidate email address, required, minLength, github.com/Jebasuthan/… Commented Mar 17, 2021 at 5:07
  • Please don't post duplicate questions just to get more answers. There are other ways to get your question attention, including posting a bounty. See What should I do if no one answers my question? Commented Mar 17, 2021 at 7:16

1 Answer 1

1

Try below steps it will help you to fix the issue.

Step 1: Install vuelidate using npm install --save vuelidate

Step 2: Register vuelidate in main.js

import Vuelidate from 'vuelidate'
Vue.use(Vuelidate)

Step 3: Importrequired, email, minLength, sameAs from vuelidate/lib/validators

import { required, email, minLength, sameAs } from 'vuelidate/lib/validators'

Step 4: Add validations

validations: {
 user: {
    name: { required },
    email: { required, email },
    password: { required, minLength: minLength(6) },
    confirmPassword: { required, sameAsPassword: sameAs('password') }
  }
},

Step 4: Do the validation on button click

methods: {
 submitRegistration () {
   this.submitted = true
   this.$v.$touch()
   if (this.$v.$invalid) {
     return false // stop here if form is invalid
   } else {
     alert('Form Valid')
   }
  }
}

Step 5: Design html template

 <template>
  <div>
    <form @submit.prevent="submitRegistration" novalidate>
      <div class="form-group">
        <input type="text" class="form-control" placeholder="First Name" value="" v-model="user.name" />
        <div v-if="this.submitted && !$v.user.name.required" class="invalid-feedback left">Enter Username</div>
      </div>
      <div class="form-group">
        <input type="text" class="form-control" placeholder="Enter your company email ID" value="" v-model="user.email" autocomplete="off"/>
        <div v-if="this.submitted && $v.user.email.$error" class="invalid-feedback left">
          <span v-if="!$v.user.email.required">Email is required</span>
          <span v-if="user.email && !$v.user.email.email">Enter valid email address</span>
          <span v-if="user.email && $v.user.email.email && !$v.user.email.maxLength">Email is allowed only 30 characters</span>
        </div>
      </div>
      <div class="form-group">
        <input type="password" class="form-control" placeholder="Enter Password" value="" v-model="user.password" autocomplete="off" />
        <div v-if="this.submitted && $v.user.password.$error" class="invalid-feedback left">
          <span v-if="!$v.user.password.required">Password is required</span>
          <span v-if="user.password && !$v.user.password.minLength">Password must be minimum 6 characters</span>
        </div>
      </div>
      <div class="form-group">
        <input type="password" class="form-control"  placeholder="Confirm Password" value="" v-model="user.confirmPassword" autocomplete="off" />
        <div v-if="this.submitted && $v.user.confirmPassword.$error" class="invalid-feedback left">
          <span v-if="!$v.user.confirmPassword.required">Confirm Password is required</span>
          <span v-if="user.confirmPassword && !$v.user.confirmPassword.sameAsPassword">Password and Confirm Password should match</span>
        </div>
      </div>
      <input type="submit" class="btnRegister" value="Register" :disabled="this.isDisabled" />
    </form>
  </div>
</template>

Step 6: Button disabled till the form is valid

created () {
  this.submitted = true
  return this.$v.$touch()
},
computed: {
  isDisabled () {
    return this.$v.$invalid
  }
},

You can refer for demo https://github.com/Jebasuthan/vue-vuex-vuelidate-i18n-registration-login-todo

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks, I tried that but issue for my above code is i have isDisabled for button. And in the computed property i need to set condition for isDisabled as to check for @ symbol.com
For now i have condition in isDisabled is "(this.email <= this.maxemail)". This condition is only checking for atleast one character move to next screen
@taneerudhanunjay I updated my answer. Button is disabled till the form is valid.
@taneerudhanunjay For demo i creaded codesandbox. Hopefully it will helps you. codesandbox.io/s/vigilant-goldberg-2mny3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.