Async demo

Remote Validation

Username availability checked with an async custom rule and debounced input validation.

Back to demo gallery

Enter a username to check availability.

Developer notes

Async rules can validate remote conditions while input validation is debounced to avoid noisy checks.

Async field

<input
  id="username"
  name="username"
  required
  data-validate="available-username"
/>

Debounced rule

const validator = new A11yFormValidator(form, {
  ...createDefaultPreset(),
  validateOn: ["submit", "blur", "input"],
  debounce: 250
});

validator.registerRule("availableUsername", async ({ value }) => {
  await new Promise((resolve) => setTimeout(resolve, 150));
  return {
    valid: !taken.has(String(value).trim().toLowerCase()),
    message: "That username is already taken."
  };
});