在HTML文本框中禁用拼写检查

327

我可以在 HTML 文本框(例如 Safari 中)中禁用拼写检查吗?

7个回答

465

更新:根据评论者的建议(额外感谢如何在iPhone上禁用文本输入框中的拼写检查器),使用以下方法以处理所有桌面和移动浏览器。

<tag autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>

原始回答:Javascript 无法覆盖用户设置,因此除非您使用文本字段之外的其他机制,否则这不可能(或不应该)发生。


6
为什么这被接受了?如果浏览器允许,它会覆盖用户设置,这毫无意义。请查看ms2ger的回答。 - usr
2
仅仅因为它是当时最好的答案。我猜Michiel还没有回来标记其他答案为正确。对我来说那也没问题,因为那是一个更好的答案。 - Eric Wendelin
2
重要提示浏览器兼容性--例如,移动Safari(iOS)不支持标签-- http://www.wufoo.com/html5/attributes/17-spellcheck.html - radicand
3
在移动Safari上(Mobile Safari),可以使用(autocorrect="off")来禁用文本输入框的拼写检查,而(spellcheck=)则无效。以上是解决https://dev59.com/tnA75IYBdhLWcg3wOGLS的正确答案。 - Chris S
1
应该是 autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck="false"。 - zaman
1
HTML属性不区分大小写。 - Gio

229

可以使用 spellcheck="false",例如 HTML5 中定义的方式:

<textarea spellcheck="false">
    ...
</textarea>

1
MDN有一张表格,展示了不同浏览器和元素的拼写检查默认值:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/spellcheck - Paul
2
我遇到了一个错误:“未知的DOM属性spellcheck。你是否意思是spellCheck?”使用spellCheck似乎可以解决它。可能只是react-dom的问题。 - Shanimal
4
是的,React 在 DOM 属性中使用驼峰式命名法。请参阅 https://reactjs.org/docs/introducing-jsx.html 。 - sookie

19
< p >对于 Grammarly ,您可以使用:

<textarea data-gramm="false" />

8

在Chrome浏览器中,如果IFrame的content-editable属性设置为true,则IFrame会像文本框一样“触发”拼写检查。


2
+1 对于将 "content-editable" 设置为 true 的技巧,这才是真正的诀窍。 - A.T.

4

基于JavaScript的解决方案:

以下代码片段禁用了所有 textareainput[type=text] 元素的拼写检查功能:

document.querySelectorAll('input[type=text], textarea').forEach(field => field.spellcheck = false);

2023年更新:如果您不需要JavaScript,@Ms2ger的HTML版本更好。

1
-1 这本来可以只用一行代码,你却写了12行。
  1. 为什么要将它包裹在一个自执行匿名函数中?
  2. 为什么要添加另一个函数并执行一次?
  3. 为什么要使第一个自执行而第二个不是?
  4. 没有必要定义你不会使用的参数。
  5. 为什么不使用更简洁的箭头函数?
document.querySelectorAll('input[type=text], textarea').forEach(field => field.spellCheck = false)
- s123
1
@s123 没错!那段代码本来就是为了提供一个现成的解决方案,而不是直接回答问题。无论如何,像您建议的那样,我通过删除无关的代码进行了简化(因此没有回答您的问题)。我不知道箭头函数在JS中也是一种东西。谢谢! - Artur INTECH
1
+1 阅读 MDN 上的这篇文章,它非常有用。箭头函数可以让你在处理小事情时写更少的代码。 - s123

1

虽然在 < tag > 中指定 spellcheck="false" 可以禁用该功能,但在页面加载后需要随时切换该功能非常方便。因此,以下是一种非 jQuery 的以编程方式设置 spellcheck 属性的方法:

:

<textarea id="my-ta" spellcheck="whatever">abcd dcba</textarea>

:

function setSpellCheck( mode ) {
    var myTextArea = document.getElementById( "my-ta" )
        , myTextAreaValue = myTextArea.value
    ;
    myTextArea.value = '';
    myTextArea.setAttribute( "spellcheck", String( mode ) );
    myTextArea.value = myTextAreaValue;
    myTextArea.focus();
}

:

setSpellCheck( true );
setSpellCheck( 'false' );

函数参数可以是布尔值或字符串。

不需要循环遍历文本区域的内容,我们只需复制粘贴其中的内容,然后设置焦点。

blink 引擎中测试通过(Chrome(ium),Edge 等)。


为什么要将值设置为空字符串,然后再将其设置为之前的值?您还使用了 myTextArea.spellCheck = mode 而不是 setAttribute,它会自动转换为字符串。 - s123

0
如果您动态创建了HTML元素,则希望通过JS禁用属性。然而,有一个小陷阱:
当设置elem.contentEditable时,您可以使用布尔值false或字符串"false"。但是,当您设置elem.spellcheck时,您只能使用布尔值-出于某种原因。因此,您的选项如下:
elem.spellcheck = false;

或者选择Mac在他的答案中提供的选项:

elem.setAttribute("spellcheck", "false"); // Both string and boolean work here. 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接