我能否以某种方式禁用 HTML 文本字段的拼写检查(如 Safari 中所见)?
7 回答
更新:根据评论者的建议(如何在 iPhone 上禁用文本输入的拼写检查器的附加功劳),使用它来处理所有桌面和移动浏览器。
<tag autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
原始答案:Javascript 不能覆盖用户设置,因此除非您使用文本字段以外的其他机制,否则这是不可能的(或不应该是)。
是的,使用HTML5spellcheck="false"
定义的,例如:
<textarea spellcheck="false">
...
</textarea>
对于语法,您可以使用:
<textarea data-gramm="false" />
至少在 Chrome 中,IFrame 将“触发”拼写检查器(如果它的 content-editable 设置为 true),就像文本字段一样。
以下代码片段对所有textarea
和input[type=text]
元素禁用它:
(function () {
function disableSpellCheck() {
let selector = 'input[type=text], textarea';
let textFields = document.querySelectorAll(selector);
textFields.forEach(
function (field, _currentIndex, _listObj) {
field.spellcheck = false;
}
);
}
disableSpellCheck();
})();
虽然在 < tag > 中指定spellcheck="false"肯定会禁用该功能,但在页面加载后能够根据需要打开和关闭该功能很方便。因此,这是一种以编程方式设置拼写检查属性的非 jQuery 方法:
:
<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' );
函数参数可以是布尔值或字符串。
无需遍历 textarea 内容,我们只需剪切粘贴那里的内容,然后设置焦点。
在闪烁引擎(Chrome(ium)、Edge 等)中测试
如果您已动态创建 HTML 元素,您将希望通过 JS 禁用该属性。然而有一个小陷阱:
设置时elem.contentEditable
,您可以使用 booleanfalse
或 string "false"
。但是当你设置时elem.spellcheck
,你只能使用布尔值 - 出于某种原因。因此,您的选择是:
elem.spellcheck = false;
或者Mac在他的回答中提供的选项:
elem.setAttribute("spellcheck", "false"); // Both string and boolean work here.