Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement a simple form with validation in a Vue app (with Vuetify.js)?

Tags:

I'm trying to add a contact form with simple validation on a website built with Vue.js using a Vuetify.js example. I'm a newbie, so I'm not sure how it should be implemented in a Vue component.


I want to achieve a simple client side form validation and make it work with a https://getform.org/ form.


UPDATED:

Code | Contact.vue

(taken from Vuetify.js form example)

<v-form v-model="valid">       <v-text-field         label="Name"         v-model="name"         :rules="nameRules"         :counter="10"         required         name="Name"       ></v-text-field>        <v-text-field         label="E-mail"         v-model="email"         :rules="emailRules"         required         name="Email"       ></v-text-field>        <v-btn           @click="submit"           :disabled="!valid"       >submit</v-btn>   </v-form>    <form method="post" action="https://www.getform.org/f/[MY_ID_HERE]" id="nativeForm"></form> 

Script

<script> export default {   name: 'contact',    data () {     return {       snackbar: true,        valid: false,         name: '',         nameRules: [           (v) => !!v || 'Name is required',           (v) => v.length <= 10 || 'Name must be less than 10 characters'         ],         email: '',         emailRules: [           (v) => !!v || 'E-mail is required',           (v) => /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v) || 'E-mail must be valid'         ]       }     },     methods: {       submit() {         nativeForm.submit()       }     }   } </script> 
like image 885
Un1 Avatar asked Dec 29 '17 01:12

Un1


People also ask

How do I add validation to Vuetify?

To add Vuetify, navigate to the project folder cd vuetify-form-validation. When the Vuetify command starts running, it'll again ask to select which preset you want. Select the default preset.

What is lazy validation in Vuetify?

form.lazy-validation. From the Vuetify form API docs: If enabled, value will always be true unless there are visible validation errors. You can still call validate() to manually trigger validation. Here, value is used to represent whether the form is currently valid.

How do I add Vuetify to Vuejs?

Vuetify can be added by installing the Nuxt Vuetify module. Once installed, update your nuxt.config.js file to include the Vuetify module in the build.

What is Vuetify in VUE JS?

Vuetify is a Vue UI Library with beautifully handcrafted Material Components. No design skills required — everything you need to create amazing applications is at your fingertips. Get Started.


2 Answers

Managed to make it work by using just 1 form:

<v-form method="post" action="https://www.getform.org/f/[YOUR-FORM-ID]" id="nativeForm" v-model="valid">        <v-text-field         label="Name"         v-model="name"         :rules="nameRules"         :counter="10"         required         name="message"       ></v-text-field>       <v-text-field         label="E-mail"         v-model="email"         :rules="emailRules"         required         name="mail"       ></v-text-field>        <v-btn @click="submit" :disabled="!valid">submit</v-btn>  </v-form> 

script

 <script>     export default {       name: 'contact',        data () {          return {              valid: false,             name: '',             nameRules: [               (v) => !!v || 'Name is required',               (v) => v.length <= 10 || 'Name must be less than 10 characters'             ],             email: '',             emailRules: [               (v) => !!v || 'E-mail is required',               (v) => /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v) || 'E-mail must be valid'             ]           }         },         methods: {           submit() {             nativeForm.submit()           }         }       }   </script> 

Don't forget:

To add name attributes. Getform needs them.

like image 150
Un1 Avatar answered Sep 19 '22 15:09

Un1


const app = new Vue({    el:'#app',    data:{      errors:[],      name:null,      age:null,      movie:null    },    methods:{      checkForm:function(e) {        if(this.name && this.age) return true;        this.errors = [];        if(!this.name) this.errors.push("Name required.");        if(!this.age) this.errors.push("Age required.");        e.preventDefault();      }    }  })
input,select {    margin-left: 10px;  }
<script src="https://unpkg.com/[email protected]/dist/vue.js"></script>  <form id="app" @submit="checkForm" action="/something" method="post">        <p v-if="errors.length">      <b>Please correct the following error(s):</b>      <ul>        <li v-for="error in errors">{{ error }}</li>      </ul>    </p>        <p>      <label for="name">Name<label>      <input type="text" name="name" id="name" v-model="name">    </p>      <p>      <label for="age">Age<label>      <input type="number" name="age" id="age" v-model="age" min="0">    </p>      <p>      <label for="movie">Favorite Movie<label>      <select name="movie" id="movie" v-model="movie">        <option>Star Wars</option>        <option>Vanilla Sky</option>        <option>Atomic Blonde</option>      </select>    </p>      <p>      <input type="submit" value="Submit">      </p>    </form>

Add some CSS and done.

like image 41
vbRocks Avatar answered Sep 17 '22 15:09

vbRocks