Shruti Nair
Shruti Nair

Reputation: 2034

Tracking input change in alpine.js

I'm learning alpine.js and trying to capture the user input value. I have used "x-on:input" but its not calling the function

Below is the simple form input

 <input type="email" class="form-control" x-on:input.debounce="validateEmail($event)" x-model="userEmail" id="email" aria-describedby="emailHelp" placeholder="Enter email">

and this is the basic method in my index.js

function validateEmail(event){
console.log(userEmail);

}

The function is not getting called.

Adding a sample stackblitz

Please Guide

Thanks Shruti Nair

Upvotes: 3

Views: 31065

Answers (1)

Hugo
Hugo

Reputation: 3888

You're looking for x-on:change

<input type="email" class="form-control" x-on:change.debounce="validateEmail($event)" x-model="userEmail" id="email" aria-describedby="emailHelp" placeholder="Enter email">

You'll also want to make your function read the value from $event.target.value

Since you've already got an x-model, you could add $watch('userEmail', (val) => {}) to x-init and validate that way.

Edit: (based on the stackblitz)

Full component:

<form x-data="{
  userEmail: '',
  validateEmail(event) {
    console.log(event.target.value);
  },
  submit($event) {
    console.log(this.userEmail)
  }
}">
  <input type="email"  class="form-control"
    x-on:change.debounce="validateEmail($event)"
    x-model="userEmail"
    id="email"
    aria-describedby="emailHelp"
    placeholder="Enter email"/>
  <button type="button" x-on:click="submit" class="btn btn-block">
    Submit
  </button>
</form>

Upvotes: 12

Related Questions