Trivule LogoTrivule

Form Validation

Form Validation

Trivule provides simple, declarative form validation. Define rules in HTML and handle events in JavaScript.

Quick Start

HTML

<form id="contact" @v:form>
  <input name="email" @v:rules="required|email" />
  <div @v:feedback="email"></div>
  
  <input name="message" @v:rules="required|min_length:10" />
  <div @v:feedback="message"></div>
  
  <button @v:submit>Submit</button>
</form>

JavaScript

import { Trivule } from 'trivule';

Trivule.init();

const form = Trivule.form('#contact');

form.onSuccess((data) => {
  console.log('Form valid!', data.values);
  // { email: 'user@example.com', message: '...' }
});

form.onError((data) => {
  console.log('Validation errors:', data.errors);
  // [{ field: 'email', message: 'Email is required' }]
});

Handling Validation

onSuccess(callback)

Called when all fields pass validation.

form.onSuccess((data) => {
  console.log(data.values);  // All validated values
});

Callback Data:

  • values - Object with all input values keyed by name

onError(callback)

Called when validation fails.

form.onError((data) => {
  console.log(data.errors);     // Array of errors
  console.log(data.firstError); // First error for convenience
  console.log(data.values);     // Current input values
});

Callback Data:

  • errors - Array of { field, message } objects
  • firstError - First error object
  • values - Current input values

Configuration

const form = Trivule.form('#myForm', {
  invalidClass: 'is-invalid',
  validClass: 'is-valid',
  feedbackSelector: '[@v:feedback={name}]',
  triggerEvents: ['submit', 'blur']  // When to validate
});

Checking Form State

// Check if form is currently valid
if (form.isValid()) {
  // Submit the form
}

// Get all input values
const values = form.inputs();  // [{ name: 'email', value: '...' }]

// Get failed inputs
const errors = form.failed();  // [{ name: 'email', value: '' }]

Custom Rules

Define custom validation rules:

const trivule = Trivule.init();

trivule.defineRule('phone', (value) => ({
  passes: /^\+?[\d\s-]+$/.test(value),
  value
}), 'Please enter a valid phone number');

Then use in HTML:

<input name="phone" @v:rules="required|phone" />

Events

Listen to form events:

// Form initialized
form.on('tr.form.init', (e) => console.log('Initialized'));

// Form validated (success or failure)
form.onValidate((form) => console.log('Validated'));