textarea上spellcheck="false"单独使用在iOS Safari等移动端无效,必须搭配autocorrect="off"、autocapitalize="none"、inputmode="verbatim"三属性组合才能真正禁用拼写红线和自动更正。

textarea 上 spellcheck="false" 怎么写才真正生效
直接写 spellcheck="false" 就行,但必须显式声明、不能省略值,也不能写成 spellcheck(无值)——后者会被浏览器当成 true。它对所有主流浏览器(Chrome、Firefox、Edge、Safari)都有效,能隐藏红色波浪线,也禁用右键“更正为…”菜单。
注意点:
- 只影响拼写高亮和建议,不影响输入法候选词或系统级自动替换(比如 iOS 的「替换文本」)
- 即使
textarea是readonly或disabled,设了也没实际作用 - 不写这个属性,浏览器默认行为是关闭拼写检查;所以“关”不是默认,而是要主动声明
input[type="text"] 加 spellcheck="false" 为什么没反应
因为 HTML 规范根本不支持:所有主流浏览器都会忽略 input 元素上的 spellcheck 属性。你看到的红色波浪线,其实是 iOS Safari 或部分 Android 输入法自己画的,跟这个属性无关。
要压制它,得靠组合属性:
立即学习“前端免费学习笔记(深入)”;
-
autocorrect="off":iOS Safari 最优先响应这个,不加基本白写 -
autocapitalize="none":防止首字母大写干扰代码或 token(如API_KEY) -
autocomplete="off":避免输入法把字段名(如name="token")当作语义线索加强纠错
完整写法:<input type="text" autocorrect="off" autocapitalize="none" autocomplete="off">
Monaco / CodeMirror 编辑器里 spellcheck="false" 失效怎么办
根本原因:你加属性的 DOM 节点不是真正接收输入的那个。Monaco 和 CodeMirror 6 都用一个透明 textarea 盖在 canvas 或 div 上捕获事件,波浪线就画在它上面。
正确做法是找到并操作那个隐藏的 textarea:
- Monaco:监听
editor.onDidFocusEditorText,再查editor.getDomNode().querySelector('textarea'),然后设spellcheck = false - CodeMirror 6:在
view.dom插入后,执行view.dom.querySelector('textarea').spellcheck = false - 别对
pre、code或只读div设spellcheck——它们不可编辑,属性无效
iOS Safari 下 spellcheck="false" 还有短暂下划线
这不是 bug,是 Safari 的异步词典检查机制:焦点进入后约 200ms 内,系统仍可能触发一次词典查询并画出短暂红线。这期间 spellcheck="false" 已生效,但底层检查已启动。
要彻底避免干扰,移动端必须四件套齐上:
spellcheck="false"autocorrect="off"autocapitalize="none"inputmode="verbatim"
漏掉 inputmode="verbatim",软键盘仍可能弹出建议栏;漏掉 autocorrect="off",iOS 会直接绕过 HTML 属性做自动修正。



















