autocorrect="off"仅在ios safari和旧版android chrome(50–70)中生效,现代chrome、firefox、edge完全忽略;它仅控制键盘自动替换词,不抑制拼写红线或联想补全,须与spellcheck="false"、autocapitalize="none"、inputmode="verbatim"组合使用才有效。

autocorrect="off" 在哪些浏览器真正生效
它只在 iOS Safari 和旧版 Android Chrome(约 50–70 版)里起作用,现代 Chrome、Firefox、Edge 完全忽略 autocorrect。别把它当跨平台开关——写了也不代表能关掉纠错。
常见误判是:看到 iPhone 上没效果,就反复改 autocorrect 值,其实问题不在它写没写对,而在没配齐其他属性。
- iOS Safari 中,
autocorrect="off"是关闭键盘自动纠错和首字母大写的必要条件 - Android 新版 Gboard 等输入法基本不认
autocorrect,得靠spellcheck="false"+inputmode="verbatim" - 桌面端无论怎么写
autocorrect="off",都不会影响拼写下划线或建议栏
单写 autocorrect="off" 为什么经常无效
因为移动端纠错行为由多个机制叠加触发:autocorrect 只管“键盘是否自动替换词”,不管“是否显示拼写红线”或“是否联想补全”。单独设它,spellcheck 仍为 true,Safari 还会画红线;autocapitalize 没关,const foo = 可能被改成 Const foo =。
正确做法不是“选一个最猛的属性”,而是组合压制:
-
autocorrect="off"—— 关 iOS 键盘自动替换 -
autocapitalize="none"—— 防止句首/单词首字母意外大写 -
spellcheck="false"—— 隐藏红色下划线,且在 Firefox/Edge 中抑制部分实时纠错 -
autocomplete="off"—— 减少输入法基于字段名(如name="code")的上下文推测
textarea 和 contenteditable 元素要特别注意什么
autocorrect 只对 <input> 和 <textarea></textarea> 生效,对 <div contenteditable="true"> 不起作用——但后者恰恰是多数代码编辑器的真实载体。
<p>这时候你加 <code>autocorrect="off" 到 div 上,等于没写。真正该加的地方是它背后那个隐藏的 <textarea></textarea>(比如 Monaco 里 class 为 monaco-editor-background 的 textarea,CodeMirror 6 里 role="textbox" 的 textarea)。
- 原生
<textarea></textarea>:直接写四件套:spellcheck="false" autocorrect="off" autocapitalize="none" inputmode="verbatim" - contenteditable 编辑器:找到实际捕获输入的
<textarea></textarea>节点,对其设置属性,而不是对外层容器 - 别给
<pre class="brush:php;toolbar:false;"></pre>或<code>加autocorrect—— 它们不可编辑,属性无意义
input[type="text"] 能不能用 autocorrect="off"
可以写,但效果有限。因为 input[type="text"] 不支持 spellcheck 属性,所以即使关了 autocorrect,Safari 仍可能因系统级拼写检查(macOS 设置中「在网页文本框中检查拼写」开启)而画红线。
更可靠的做法是换用 <textarea></textarea>,或确保同时满足:
- 元素必须可编辑(
contenteditable="true"或原生表单控件) - 移动端需显式声明
inputmode="verbatim",告诉键盘“别猜词、别弹建议栏” - 密码类输入框(
type="password")默认禁用拼写检查,无需额外设置
真正容易被忽略的是:autocorrect 不是开关,而是一块拼图。漏掉 spellcheck="false" 或 inputmode,哪怕只在某个机型上失效,用户就会看到“recieve → receive”的自动修正,而你查 DOM 也看不出哪写错了。











