Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制对WebKit中的文本区域进行拼写检查_Javascript_Webkit_Textarea_Spell Checking - Fatal编程技术网

Javascript 强制对WebKit中的文本区域进行拼写检查

Javascript 强制对WebKit中的文本区域进行拼写检查,javascript,webkit,textarea,spell-checking,Javascript,Webkit,Textarea,Spell Checking,我正在创建一个基于浏览器的QC/数据输入应用程序,让人们编辑OCRD文件,这些文件自然会有大量错误。数据块放在文本区域中以便检查,但只有当用户手动将光标放在拼写错误的单词中时,才会出现红色下划线 有没有办法强迫WebKit在文本区域中添加红色拼写检查下划线?我不知道这是否真的有效,但您可能想尝试使用选择内容。换句话说,在更新文本区域(并希望“刷新”它以显示红色下划线)后,您可能可以执行以下操作: var length = document.getElementById('TEXTAREA#you

我正在创建一个基于浏览器的QC/数据输入应用程序,让人们编辑OCRD文件,这些文件自然会有大量错误。数据块放在文本区域中以便检查,但只有当用户手动将光标放在拼写错误的单词中时,才会出现红色下划线


有没有办法强迫WebKit在文本区域中添加红色拼写检查下划线?

我不知道这是否真的有效,但您可能想尝试使用选择内容。换句话说,在更新文本区域(并希望“刷新”它以显示红色下划线)后,您可能可以执行以下操作:

var length = document.getElementById('TEXTAREA#your').value.length;
document.getElementById('TEXTAREA#your').setSelectionRange(0, length);
您可以在此处找到有关如何使用选项的更多信息: 或者通过谷歌搜索


我的想法是,创建一个选择(或者在创建它之后清除它)可能会触发另一个浏览器事件,从而导致拼写检查刷新。。。但这只是一个想法;它的作用可能与设置textArea.value(即nothing)完全相同。

基本上,您需要使用选择api将插入点移动到每个单词上,以使Safari高亮显示它。这里有一个例子来浏览前一千个单词

textarea = document.getElementById("mytextarea");
textarea.focus();

var selection = window.getSelection();
selection.modify("move", "backward", "line");
for (var i = 0; i < 1000; i++ ) {
    selection.modify("move", "forward", "word");
}

// Remove focus from the element, since the word under
// the cursor won't have a misspelling marker.
textarea.blur();
textarea=document.getElementById(“mytextarea”);
textarea.focus();
var selection=window.getSelection();
选择。修改(“移动”、“向后”、“直线”);
对于(变量i=0;i<1000;i++){
选择。修改(“移动”、“前进”、“单词”);
}
//从元素中移除焦点,因为单词位于
//光标不会有拼写错误的标记。
textarea.blur();

这段代码是从Mark Fowler的回答中提取出来的。

这是一个很好的答案,下面是对它的改进:

textarea = document.getElementById("mytextarea");
textarea.focus();
var textLength = textarea.value.length;

var selection = window.getSelection();
for (var i = 0; i < textLength; i++ ) {
    selection.modify("move", "backward", "character");
}

// Remove focus from the element, since the word under
// the cursor won't have a misspelling marker.
textarea.blur();
textarea=document.getElementById(“mytextarea”);
textarea.focus();
var textLength=textarea.value.length;
var selection=window.getSelection();
对于(变量i=0;i

因此,您可以避免任意1000个数字,并且它可以处理多行。

这是一个好主意。我也在考虑一个字一个字地在每个文本区域中运行光标,但这可能需要足够的时间来烦扰用户;现在你让我好奇:-)如果我尝试,我会发布,但这只是一个仓促项目的一小部分。要让它在今天起作用,你需要做:
wait wait(0);选择。修改('move'、'forward'、'word')
,其中
wait(ms){returnnewpromise(resolve=>setTimeout(resolve,ms))}