formnovalidate必须加在type="submit"的button或input上才有效,对text/select/textarea等无效;需位于form内或通过form属性关联;仅跳过原生提交拦截,不影响validity API和submit事件;Safari兼容性差,关键场景需JS兜底。

formnovalidate 必须加在 type="submit" 的按钮上
它不是通用校验开关,只对真正会触发表单提交的控件生效。加在 、 或 上完全无效,浏览器直接忽略,连控制台警告都不会有。
-
✅ 正确 -
❌ 默认type="button",不提交,属性无意义 -
❌type="reset"不支持该属性 -
✅ 同样有效
按钮必须属于某个 form 才能生效
如果按钮写在 标签外部,formnovalidate 会静默失效——它需要明确的作用域。此时必须用 form 属性显式关联表单 ID。
-
✅ 关联后才起作用 - 没写
form属性,又不在内部 → 点击后仍触发原生校验
点击时跳过什么、保留什么要分清
formnovalidate 只绕过浏览器在提交瞬间的自动拦截流程,其他验证相关能力照常工作。别误以为它“关掉了验证”。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 不调用
checkValidity(),不聚焦第一个错误字段,不弹红框/气泡提示 - 但
input.validity.valid、form.checkValidity()返回值不变 -
:invalid伪类依然匹配,CSS 样式可能意外激活(尤其当同时用了novalidate) -
submit事件照常触发,JS 里仍可做自定义逻辑
Safari 兼容性差,关键路径不能依赖
iOS Safari 15.4–17.x 对 formnovalidate 支持不稳定,某些组合下会静默失效:按钮点了,表单却仍被拦住、弹出原生提示。这不是你代码写错了,是浏览器 Bug。
- 上线前务必在真机 Safari 测试带
formnovalidate的按钮 - 稳妥兜底写法:
- 避免用
form.requestSubmit()—— 它会无视formnovalidate,重新触发校验
实际最易被忽略的一点:回车提交不受 formnovalidate 控制。用户按 Enter 键时,浏览器只看 是否有 novalidate,或默认第一个 type="submit" 按钮的属性。这个行为和点击按钮完全不同,必须单独处理。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










