formnovalidate能跳过html5表单验证,因为它是一个布尔属性,仅对type="submit"的按钮或input生效,点击时直接绕过浏览器原生校验(如required、email等),但不影响submit事件触发和后端校验。

formnovalidate 属性为什么能跳过 HTML5 表单验证
HTML5 表单默认会在 <button type="submit"></button> 或 <input type="submit"> 触发时执行内置校验(比如 required、email、minlength),而 formnovalidate 是一个布尔属性,只要存在,就会让该按钮**完全绕过浏览器原生验证逻辑**,直接提交表单数据——哪怕所有必填字段为空。
它不取消 onsubmit 事件,也不影响后端校验,只作用于前端浏览器的自动校验环节。
怎么给提交按钮正确添加 formnovalidate
必须确保按钮是表单内的提交控件,并显式声明 type="submit";formnovalidate 对 type="button" 无效。
<button type="submit" formnovalidate>保存草稿</button><input type="submit" formnovalidate value="保存草稿">- 如果按钮在表单外,需用
form属性关联:<button type="submit" form="myForm" formnovalidate>…</button> - 不要写成
formnovalidate="true"或formnovalidate="false"—— 它是布尔属性,只看是否存在
和 JavaScript submit() 方法混用时的坑
调用 form.submit() 不会触发任何验证,但也不会触发 formnovalidate —— 因为它根本没走按钮点击流程。所以如果你在 JS 里手动调用 submit(),formnovalidate 完全不起作用。
想实现“JS 控制 + 跳过验证”,有两个选择:
- 直接用
form.submit()(最简单,但无法区分“保存草稿”和“正式提交”) - 用
document.querySelector('[formnovalidate]').click()模拟点击带formnovalidate的按钮(保留语义和行为一致性) - 别在
onsubmit里 return false 后又手动 submit() —— 这样会丢掉formnovalidate的上下文,验证可能意外触发
兼容性和服务端注意事项
formnovalidate 在所有现代浏览器(Chrome、Firefox、Safari、Edge)都支持,IE10+ 也支持,基本无兼容性风险。
但容易被忽略的是:它只影响前端校验,后端依然要按业务规则判断“草稿”是否允许缺失字段。例如:
- 草稿接口应接受空值或部分字段,不能照搬正式提交的校验逻辑
- 建议在提交时加隐藏字段标识类型:
<input type="hidden" name="save_type" value="draft"> - 别依赖
formnovalidate来“放松”安全校验 —— XSS、SQL 注入等仍需服务端防护
真正麻烦的从来不是加个属性,而是前后端对“草稿”语义的一致理解:字段可空不等于字段可删,时间戳谁生成,状态怎么存,这些才是落地时卡住的地方。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











