
默认浏览器表单验证的 tooltip 会在失焦或滚动后自动消失,无法持久化;本文介绍通过拦截 invalid 和 input 事件、结合 CSS 控制自定义错误提示显示状态,实现“错误不修复、提示不消失”的用户体验。
默认浏览器表单验证的 tooltip 会在失焦或滚动后自动消失,无法持久化;本文介绍通过拦截 `invalid` 和 `input` 事件、结合 css 控制自定义错误提示显示状态,实现“错误不修复、提示不消失”的用户体验。
要实现错误提示仅在用户修正输入后才消失(而非失焦即隐),必须绕过浏览器原生 tooltip 的不可控行为——因为原生 setCustomValidity() 仅能修改提示文本,无法干预其显示/隐藏生命周期。核心思路是:禁用原生提示,改用自定义 DOM 元素 + CSS 状态控制。
✅ 正确实现步骤
-
阻止原生验证提示:在
invalid事件中调用e.preventDefault(),并使用useCapture: true确保在冒泡前拦截(关键!否则事件可能已被处理); -
标记无效状态:为出错字段添加
.invalid类; -
绑定自定义提示:通过相邻兄弟选择器(
~)关联与下方










