怎么在HTML中通过validity对象判断表单控件的具体校验失败原因

酷静大大_8279

酷静大大_8279

2026-05-10

291人浏览

原创

validity属性返回validitystate对象,其布尔属性包括valuemissing、typemismatch、patternmismatch、toolong、rangeunderflow、rangeoverflow、stepmismatch、customerror和valid。

怎么在html中通过validity对象判断表单控件的具体校验失败原因

validity对象有哪些可用的布尔属性

validity 是每个表单控件(<input>、<textarea></textarea>、<select></select>)都有的只读属性,返回一个 ValidityState 对象。它本身不“触发”校验,只是反映当前值在浏览器规则下的状态。你得先让浏览器执行一次校验(比如用户提交、调用 checkValidity() 或 reportValidity()),它的属性才真正有意义。

常见可用布尔属性包括:valueMissing、typeMismatch、patternMismatch、tooLong、rangeUnderflow、rangeOverflow、stepMismatch、customError。它们互不排斥——一个字段可能同时为 true 多个,但浏览器只会按优先级显示其中一条错误(比如 valueMissing 优先于 typeMismatch)。

如何准确读取失败原因并避免误判

直接读 input.validity.valueMissing 这类属性没问题,但要注意:这些值只在控件处于“可验证状态”时才可靠。如果控件被设为 disabled、hidden,或父 <form></form> 带了 novalidate,willValidate 会是 false,此时所有 validity 属性都失去意义。

Html2md
Html2md

使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...

下载
  • 务必先检查 input.willValidate === true,否则读出来的 validity 是空壳
  • validity.valid 是汇总结果(所有子项都为 false 才为 true),但它不告诉你哪条错了;要定位原因,必须逐个查子属性
  • 不要只依赖 validity.customError 判断是否自定义出错——它为 true 仅表示 setCustomValidity() 被传入非空字符串,不代表其他规则没触发;实际错误可能是 valueMissing 和 customError 同时存在
  • Safari 对 date、time 类型的 validity 支持不稳定,建议 fallback 到 input.value.length 或 pattern 配合判断

结合 validationMessage 获取对应提示文本

input.validationMessage 会返回浏览器根据当前首个 true 的 validity 属性生成的默认提示文字。它不是固定字符串,而是动态计算的——比如 valueMissing 为 true 时返回 “请填写此字段”,typeMismatch 为 true 且 type="email" 时返回 “请输入有效的电子邮件地址”。

这个值只有在校验已触发后才有内容。常见误用是:在用户还没输入、也没调过 checkValidity() 就去读它,结果为空字符串。

  • 安全读法:if (!input.checkValidity()) { console.log(input.validationMessage); }
  • 它和 validity 属性是联动的,但不能反推——比如看到提示是 “请填写此字段”,不能 100% 断定就是 valueMissing,因为某些自定义消息也可能覆盖成一样文字
  • 若用了 setCustomValidity("用户名已存在"),validationMessage 就等于该字符串,此时 validity.customError 为 true,其他属性可能全为 false

为什么 validity.typeMismatch 在 type="email" 时总不生效

这不是 bug,是浏览器行为细节:当 input 的 type="email",但值为空或只含空白字符时,valueMissing 优先级高于 typeMismatch,所以即使你输了个 "abc",只要字段没设 required,浏览器根本不会进入类型校验阶段。

  • 要让 typeMismatch 触发,字段必须同时满足两个条件:有值(哪怕非法),且 willValidate === true
  • 典型陷阱:写了 type="email" 却漏了 required,用户输 "abc" 后点提交,validity.valueMissing 是 false,但 validity.typeMismatch 仍是 false——因为浏览器认为“有值”就跳过必填检查,但又没主动对非空非法值做类型校验(除非你手动调 checkValidity())
  • 修复方式:要么加 required,要么在 JS 中显式调用 input.checkValidity() 强制触发全量校验
  • 注意:Chrome 和 Firefox 对非空非法值的 typeMismatch 行为基本一致,但 Safari 有时会忽略,建议始终用 pattern 显式兜底,例如 pattern=".+@.+\..+"

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

html

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6475

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3612

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3290

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3299

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4979

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3241

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

3049

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2688

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2768

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 225人学习