autocorrect="off" 仅在 iOS/macOS Safari 和旧版 Android Chrome(50–70)生效,现代 Chrome/Firefox/Edge 完全忽略;它比 spellcheck="false" 更早介入输入流程,且必须写成带引号的字符串形式。

autocorrect="off" 在 iOS Safari 里才真正起作用
现代 Chrome、Firefox、Edge 完全忽略 autocorrect 属性,它只对 iOS/macOS Safari 和旧版 Android Chrome(50–70)生效。别指望靠它在桌面端或新安卓浏览器里关掉纠错——写了也白写。
但在 iOS Safari 中,autocorrect="off" 是第一道防线:它能压住键盘自动替换和首字母大写,比 spellcheck="false" 更早介入输入流程。必须写成完整字符串形式,不能省略引号或写成布尔值。
-
autocorrect="off"✅ 正确(带引号、值为 off) -
autocorrect❌ 错误(无值,默认视为 on) -
autocorrect={false}❌ React 里这样写会被转成autocorrect="false",Safari 不认
textarea 和 contenteditable 元素才支持 spellcheck="false"
spellcheck="false" 对 <input type="text"> 基本无效,浏览器常直接忽略。它只在可编辑的块级元素上稳定生效:<textarea></textarea> 或设置了 contenteditable="true" 的 <div>、<code><pre class="brush:php;toolbar:false;"></pre> 等。
如果你用的是 Monaco、CodeMirror 这类编辑器,它们的真实输入层通常是隐藏的 <textarea></textarea>(比如 class="monaco-editor-background" 下的那个),不是你看到的代码渲染区。给外层 div 加 spellcheck="false" 没用,得找到并操作那个实际接收输入的 textarea。
- React 项目中,确保属性名是小写字符串:
<textarea spellcheck="false" autocorrect="off"></textarea> - 不要给
<code>或<pre class="brush:php;toolbar:false;"></pre>(未设 contenteditable)加spellcheck,它根本不可编辑,属性无效 - iOS Safari 中,
spellcheck="false"可能延迟 200ms 才消失下划线,不是失效,是异步词典检查机制
必须三件套齐上:autocorrect + spellcheck + autocapitalize
单靠一个属性无法覆盖所有平台。iOS 上缺 autocapitalize="none",密码或代码输入时仍会首字母大写;Android 上光有 autocorrect 没用,得靠 spellcheck="false" 配合 inputmode="text" 抑制预测键盘。
完整写法示例:
<textarea spellcheck="false" autocorrect="off" autocapitalize="none" autocomplete="off"></textarea>
-
autocomplete="off"虽不控拼写,但某些输入法(尤其 iOS)会把它当作“允许上下文推测”的信号,关掉能减少干扰 - 密码类输入框(
type="password")默认禁用拼写检查,无需额外加spellcheck,但autocapitalize="none"仍建议加上 - macOS 或 iOS 系统级「自动更正」开关开着时,HTML 属性只是请求,不是强制命令——用户设置优先级更高
验证是否真生效,别只看代码
写完属性不代表搞定。打开真机(不是模拟器),输一个明显错词(比如 recieve),观察两个关键点:
- 有没有红色波浪线
- 右键点击或长按是否弹出“更正为…”菜单
两者都消失才算成功。如果还标红,大概率是 macOS 系统设置里「键盘 → 文本输入 → 在网页文本框中检查拼写」没关,或者 Safari 正在用系统词典做异步校验——这时 HTML 属性已尽力,再往下就得动终端命令或调整系统偏好了。











