spellcheck="false" 仅对 textarea 和 contenteditable="true" 元素有效,input[type="text"] 上无效;需配合 autocorrect="off"、autocapitalize="none"、inputmode="verbatim" 四件套才能彻底禁用拼写检查。

spellcheck="false" 单独加在 input[type="text"] 上基本无效,不是你写错了,而是浏览器根本不认——它只对 textarea 和 contenteditable="true" 元素真正起效。
textarea 上 spellcheck="false" 怎么写才真正生效
这是最可靠、兼容性最好的场景:textarea 原生支持该属性,设为 false 后主流浏览器都会隐藏红色波浪线。但仅靠它还不够:
- 必须显式写
spellcheck="false",不写或写成spellcheck(无值)会被当成true - 在 iOS Safari 和部分 macOS 场景下,
spellcheck="false"会短暂闪现红线(约 200ms),这不是 bug,是其异步词典检查机制 - 要彻底禁用,得配齐四件套:
spellcheck="false"+autocorrect="off"+autocapitalize="none"+inputmode="verbatim" -
autocorrect="off"是 iOS Safari 的关键开关,优先级高于spellcheck;漏掉它,其他都白搭
正确示例:
<textarea spellcheck="false" autocorrect="off" autocapitalize="none" inputmode="verbatim"></textarea>
input[type="text"] 为什么 spellcheck="false" 完全没反应
因为 HTML 规范明确不支持:Chrome、Firefox、Safari 都会忽略 input 上的 spellcheck 属性。你看到的红线,其实是 iOS 键盘或系统级自动更正渲染的,和该属性无关。
立即学习“前端免费学习笔记(深入)”;
- 压制它的唯一办法是组合属性:
autocorrect="off"(iOS Safari 必须)、autocapitalize="none"(防首字母大写干扰)、autocomplete="off"(避免输入法把字段名当语义线索) -
inputmode="verbatim"在部分 Android 和新版 iOS 中能进一步抑制拼写建议栏 - 如果字段允许换行或内容较复杂,直接换成
textarea更省心、更可控
错误写法:
<input type="text" spellcheck="false">正确写法:
<input type="text" autocorrect="off" autocapitalize="none" autocomplete="off" inputmode="verbatim">
Monaco / CodeMirror 编辑器里 spellcheck="false" 失效的根本原因
你加属性的 DOM 节点根本不是真正接收输入的那个。Monaco 把一个透明 textarea 盖在 canvas 上捕获事件;CodeMirror 6 的输入层是 role="textbox" 的 textarea。波浪线就画在它上面,而不是外层容器上。
- 别给
div#editor或pre加spellcheck="false"——它们不可编辑,属性静默忽略 - Monaco:监听
editor.onDidFocusEditorText,再查editor.getDomNode().querySelector('textarea')并设spellcheck = false - CodeMirror 6:在
view.dom插入后,执行view.dom.querySelector('textarea').spellcheck = false - Electron 应用还要检查主进程
webPreferences.spellcheck: false是否开启,它会全局屏蔽前端所有spellcheck设置
contenteditable 容器中 spellcheck 不继承、子元素容易漏设
contenteditable="true" 的父容器默认关闭拼写检查,且 spellcheck 不自动继承到子节点。新插入的 p、span 或粘贴进来的富文本,即使父级写了 spellcheck="false",子元素仍按默认行为处理(通常是 false,但不可靠)。
- 必须显式给每个可编辑子元素加
spellcheck="false",比如:<p contenteditable="true" spellcheck="false"> - Slate、Draft.js 等框架动态生成节点时极易漏掉这步,要用
MutationObserver监听并补上 - Safari 对
contenteditable的spellcheck支持最弱,有时属性存在也完全不画线 - 若目标是写代码、JSON、token 等非自然语言内容,强烈建议放弃
contenteditable,改用带四件套的textarea
真正起效的关键从来不是“写了 spellcheck”,而是“作用到了那个正在接收输入的、可编辑的、被浏览器实际检查的 textarea 节点上”,并且在移动端绕过了系统键盘的自动更正逻辑。漏掉 autocorrect="off" 或写错目标节点,90% 的问题就出在这儿。



















