【发布时间】:2010-09-20 06:17:19
【问题描述】:
我能否以某种方式禁用 HTML 文本字段的拼写检查(如 Safari 中所见)?
【问题讨论】:
我能否以某种方式禁用 HTML 文本字段的拼写检查(如 Safari 中所见)?
【问题讨论】:
如果您已动态创建 HTML 元素,则需要通过 JS 禁用该属性。但是有一个小陷阱:
设置elem.contentEditable 时,您可以使用布尔值false 或字符串"false"。但是当你设置elem.spellcheck 时,你只能使用布尔值——出于某种原因。因此,您的选择是:
elem.spellcheck = false;
或者他的回答中提供的选项Mac:
elem.setAttribute("spellcheck", "false"); // Both string and boolean work here.
【讨论】:
虽然在 中指定 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' );
函数参数可以是布尔值或字符串。
无需循环遍历 textarea 内容,我们只需剪切并粘贴那里的内容,然后设置焦点。
在 blink 引擎(Chrome(ium)、Edge 等)中测试
【讨论】:
以下代码 sn-p 为所有 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();
})();
【讨论】:
对于语法,您可以使用:
<textarea data-gramm="false" />
【讨论】:
是的,使用spellcheck="false",由HTML5定义,例如:
<textarea spellcheck="false">
...
</textarea>
【讨论】:
spellCheck 似乎可以满足它。可能只是一个 react-dom 的事情。
更新:根据评论者的建议(How can I disable the spell checker on text inputs on the iPhone),使用它来处理所有桌面和移动浏览器。
<tag autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
原始答案:Javascript 无法覆盖用户设置,因此除非您使用文本字段以外的其他机制,否则这是不可能的(或不应该是)。
【讨论】:
autocorrect="off") 对于 Mobile Safari - spellcheck= 不起作用
至少在 Chrome 中,IFrame 将“触发”拼写检查器(如果它的 content-editable 设置为 true),就像文本字段一样。
【讨论】: