通过JavaScript禁用文本区域的拼写检查是否可行?

13

是否可以通过JavaScript禁用文本区域中的拼写检查?

我一直在研究HTML5的'spellcheck'属性,并且可以让它单独工作。但是,我希望能够通过JavaScript更改此属性。

阅读上面链接提供的文档后,我编写了以下代码行(来自较大文件的片段;我知道它们无法单独工作):

document.querySelector("#editor").spellcheck = "false";

并且

document.querySelector("#editor").spellcheck = "true";

但是它似乎不起作用。我是做错了还是误解了文档?(令人无助的是,谷歌浏览器中的JavaScript控制台没有返回错误。)还是有其他方法来完成这个任务?

3个回答

21
你正在将它设置为字符串"true"(一个true值)和字符串"false"(也是一个true值)。 使用布尔值而不是字符串。去掉引号。

2
此外,使用 document.getElementById("editor") 而不是 document.querySelector("#editor") - Tim Down
从HTML5规范的拼写检查[1]中可以看到,字符串 false 被解析。在iOS5上的iPad上进行测试表明,element.spellcheck = false;element.setAttribute('spellcheck','false'); 都不起作用。[1] http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#spelling-and-grammar-checking - robocat
我上面的评论是错误的。然而,在iPad上使用iOS5进行测试似乎表明,element.spellcheck = false;element.spellcheck = 'false';element.setAttribute('spellcheck','false');都不起作用。尝试将自动完成、自动大写、自动更正设置为关闭,但也似乎没有起作用。非常令人沮丧! - robocat
2
原来,如果输入框已经获取了焦点,在onfocus事件中改变属性是被忽略的。如果我在创建输入框时进行以下操作:element.setAttribute('autocomplete', 'OFF'); element.setAttribute('autocorrect', 'OFF');,那么它对我来说是有效的。 - robocat
el.autocorrect = el.autocomplete = el.autocapitalize = el.spellcheck = false; 运行良好(除非输入框已经聚焦,此时它将不起作用!)。 - robocat

2

对我来说,JavaScript中的字符串/布尔值区分并不影响HTML属性——JavaScript会解释"false" == false

你可能遇到了拼写检查没有被取消的问题,因为你没有强制它重新评估文本区域。为了强制执行此操作,请尝试以下代码:

var editor = document.getElementById("editor");
editor.spellcheck = false;
editor.focus();
editor.blur();

这里的“focus”指的是焦点,它会强制浏览器重新评估文本区域,而且不会进行拼写检查。希望对您有所帮助!


0

假设这是一个基本属性。

以下代码应该可以在不使用库的情况下工作:

document.getElementById('editor').setAttribute('spellcheck', 'true'); // or false

而且使用jQuery:

$('#editor').attr('spellcheck', 'true'); // or false

1
通常使用 setAttribute() 是一个不好的主意(在 IE 中它是有问题的,而且并不能做到很多人想要的效果)。使用相应的属性通常更好。 - Tim Down

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