---
title: "Form validates on every keystroke (ui/validate-late)"
description: "Errors appear before the user finished typing."
url: http://localhost:4173/rules/ui/validate-late
updated: 2026-11-11
---

# Form validates on every keystroke

> `ui/validate-late` is a vetd rule. It flags: Form validates on every keystroke. It runs on every `check`, together with the TypeScript check.

| Fact | Value |
| --- | --- |
| Rule id | `ui/validate-late` |
| Severity | warning |
| Group | Interface craft: accessibility, motion and mobile |
| Tags | accessibility |

## Why it matters

Errors appear before the user finished typing.

## How to fix it

Keep react-hook-form's default mode, or use "onBlur"/"onTouched".

## References

- [Help users enter the right data in forms](https://web.dev/learn/forms/validation), web.dev
- [useForm API: Manage React Forms | React Hook Form](https://react-hook-form.com/docs/useform), React Hook Form

## See it

Demos in the vetd Lab:

- [Submit states, inline errors](http://localhost:4173/lab/web-guidelines/submit-and-errors)
- [Validate before submit](http://localhost:4173/lab/frontend-patterns/controlled-form-validation)

## Related rules

- [`ui/input-type`](http://localhost:4173/rules/ui/input-type.md)

## Get this text from vetd

MCP: call `explain` with `{ "diagnosticId": "ui/validate-late" }`. CLI: `npx vetd explain ui/validate-late`.

---

[All 92 rules](http://localhost:4173/rules.md) · Previous: [`ui/theme-switch-transitions`](http://localhost:4173/rules/ui/theme-switch-transitions.md) · Next: [`ui/input-type`](http://localhost:4173/rules/ui/input-type.md)
