spellcheck="false" 单独加在 textarea 上不能保证关闭拼写红线,因 iOS/macOS 系统级 autocorrect、autocapitalize、inputmode 会绕过它;需四属性齐备:spellcheck="false"、autocorrect="off"、autocapitalize="none"、inputmode="verbatim"。

spellcheck="false" 单独加在 textarea 上,**不能保证关掉拼写红线**——尤其在 iOS Safari 和部分 macOS 场景下,红线仍会闪现或右键仍有更正菜单。
为什么 spellcheck="false" 在 textarea 里经常失效
浏览器对拼写检查的控制是分层的:spellcheck 只管“是否触发拼写引擎”,但 iOS/macOS 系统级自动更正(autocorrect)、首字母大写(autocapitalize)、键盘输入模式(inputmode)会绕过它独立生效。Safari 尤其典型:即使 spellcheck="false" 已设置,只要系统「自动拼写更正」开启且元素获得焦点,仍可能短暂显示红线(约 200ms 后消失),这不是 bug,而是其异步词典检查机制。
验证是否真关闭,必须输一个明显错词(如 recieve),同时观察两个信号:① 是否有红色波浪线;② 右键点击是否弹出“更正为…”菜单。两者都消失才算生效。
textarea 必须配齐的四件套属性
只写 spellcheck="false" 是懒人写法,线上环境大概率翻车。真正起效要四属性齐上:
立即学习“前端免费学习笔记(深入)”;
-
spellcheck="false"—— 关闭浏览器拼写引擎(Chrome/Firefox/Edge 主要靠它) -
autocorrect="off"—— iOS Safari 最认这个,不加它,spellcheck形同虚设 -
autocapitalize="none"—— 防止const foo =被自动变成Const foo = -
inputmode="verbatim"—— 告诉移动端键盘:“别联想、别纠错、别唤出拼写建议栏”
正确写法示例:<textarea spellcheck="false" autocorrect="off" autocapitalize="none" inputmode="verbatim"></textarea>
Google 翻译页、VS Code Web 版的输入框都是这么配置的,兼容性经过大规模验证。
常见踩坑点
这些写法看着像对,实际无效:
- 给
<pre>或<code>加spellcheck="false"—— 它们默认不可编辑,该属性完全被忽略 -
<textarea spellcheck>或<textarea spellcheck="">——spellcheck是布尔属性,但必须显式写"true"或"false",空值或无值都不生效 - 在
input[type="text"]上硬套spellcheck="false"—— 大部分浏览器(尤其 Safari)根本不支持该属性在单行输入框上生效,改用textarea更可靠 - 忘了关系统级开关 —— macOS 用户需检查「系统设置 → 键盘 → 文本输入 → 在网页文本框中检查拼写」是否关闭;iOS 用户需确认「设置 → 通用 → 键盘 → 自动更正」是否关掉
最麻烦的不是写不对,而是以为写对了就完事——拼写红线这种问题,必须在真实设备(尤其是 iPhone + Safari)上输错词、点右键、看延迟行为,才能确认是否真关干净。



















