formnovalidate 属性使提交按钮跳过 html5 表单验证,仅对该按钮生效,需配合 type="submit" 使用,不影响 js 手动校验,也不改变后端校验必要性。

formnovalidate 属性为什么能跳过表单验证
它告诉浏览器:这个提交按钮不触发 checkValidity(),也不执行内置的 required、type="email" 等校验逻辑。本质是绕过 HTML5 表单验证的“默认拦截”,但只对当前按钮生效——其他 submit 按钮仍照常验证。
常见错误现象:formnovalidate 加在非 <button type="submit"></button> 或 <input type="submit"> 元素上无效;加在普通 <button></button> 上(没设 type)也不会触发表单提交,自然也跳不过验证。
- 必须配合
type="submit"使用,否则不参与表单提交流程 - 不能和
formaction、formmethod混用时忽略验证逻辑(它们各自独立控制行为) - 它不影响 JavaScript 手动调用的
form.checkValidity(),后者仍会返回false
草稿箱按钮怎么写才真正跳过验证
典型场景:用户想先保存草稿,哪怕邮箱没填、标题为空也不报错。关键不是“不验证”,而是“提交时不触发验证”,所以按钮必须属于表单、且声明跳过。
-
formnovalidate必须写在<button type="submit"></button>或<input type="submit">上 - 如果草稿提交走的是 AJAX,建议仍用
type="button"+ JS 控制,避免页面跳转干扰;此时formnovalidate不需要 - 后端仍需校验——
formnovalidate仅影响前端 UI 层,不改变数据合法性
和 onclick="return false" 或 preventDefault 的区别
有人用 onclick="return false" 或 JS 阻止默认行为来“跳过验证”,但这直接取消了整个提交动作,连数据都发不出去。而 formnovalidate 是让浏览器照常序列化表单、发出请求,只是省掉校验步骤。
-
formnovalidate→ 提交照常发生,验证被跳过 -
event.preventDefault()→ 提交被拦住,什么都不会发 - 混用两者(比如加了
formnovalidate又调preventDefault)会导致按钮完全失效
兼容性和容易被忽略的细节
formnovalidate 在所有现代浏览器中支持良好(Chrome 10+、Firefox 4+、Safari 5.1+),IE10+ 也支持。但要注意两个隐形坑:
- 如果表单里有多个 submit 按钮,只有带
formnovalidate的那个跳过验证;其他按钮仍会校验 - 当使用
<input type="image">提交时,formnovalidate同样有效,但需确保它在表单内或通过form属性关联 - 移动端 Safari 有时对空字段的视觉反馈(如红色边框)延迟消失,不是验证没跳过,而是样式刷新滞后
最常被漏掉的一点:草稿按钮提交后,表单字段可能仍显示验证失败样式(比如红色边框),因为浏览器内部状态没重置。需要用 form.reportValidity() 或手动清除 classList 来清理 UI。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











