required属性仅做基础非空校验,支持text、email、url、tel、number、search、password、checkbox、radio和file类型,对hidden等无效;checkbox要求勾选,radio需同name成组,file须选至少一个文件;校验失败时浏览器自动聚焦并提示,但提示不可定制,且移动端safari支持弱。

required 属性本身只做最基础的非空校验,它不校验内容是否有意义,也不触发自定义提示或兼容旧浏览器——别指望它能替代 JS 验证。
哪些 input 类型支持 required?
不是所有 input 类型都生效。它对 text、email、url、tel、number、search、password、checkbox、radio 和 file 有效;但对 hidden、button、submit、reset、image 无效。
特别注意:checkbox 和 radio 的 required 行为不同:前者要求至少一个被勾选,后者要求同 name 的组里至少一个被选中。
-
type="checkbox"单独使用时加required意味着“必须勾选这个” -
type="radio"必须成组(相同name),required才有意义 -
type="file"加required表示“必须选中至少一个文件”,空文件输入框不算通过
required 校验失败时的默认行为
提交表单时,若带 required 的字段为空,浏览器会自动聚焦到该字段,并弹出原生提示(如 Chrome 显示“请填写此字段”)。这个提示无法用 CSS 完全定制,且文案不可控。
- 提示只在
form的submit事件触发时出现,不会响应input实时变化 - 如果用户手动调用
form.reportValidity(),也会触发同样校验和提示 - 移动端 Safari 对
required的提示支持较弱,有时仅高亮无文字提示
容易被忽略的空值边界情况
required 判定“空”的逻辑很朴素:对文本类输入,只检查 value.trim() === "";对 select,检查 selectedIndex === 0 且首个 option 没有 value 或 value="";对 checkbox/radio,检查是否处于未选中状态。
- 用户输入纯空格(
" ")会被当成空,required会拦截 -
select元素第一个option写成<option value="">请选择</option>,即使用户没选,required也会认为无效 - 动态设置
value后未触发input或change事件,required不会重新评估(它只看当前 DOM 值)
真正要稳住校验逻辑,得配合 checkValidity() 和 setCustomValidity() 做增强;required 只是起点,不是终点。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











