2009-12-10 12 views
7

Tworzę przeglądarkę opartą na przeglądarce/aplikacji do wprowadzania danych, która pozwoli użytkownikom edytować pliki OCRed, które naturalnie mają mnóstwo błędów. Fragmenty danych są umieszczane w tekstach, aby można je było sprawdzić, ale czerwone podkreślenia pojawiają się tylko wtedy, gdy użytkownik ręcznie wstawi kursor do błędnie napisanego słowa.Wymuś sprawdzanie pisowni na obszarze tekstowym w pakiecie WebKit

Czy istnieje sposób na zmuszenia WebKita do dodania małych podkreśleń redagowania czarów do obszarów tekstowych?

Odpowiedz

10

Zasadniczo musisz użyć api wyboru, aby przesunąć punkt wstawiania nad każdym słowem, aby Safari go podświetliło. Oto przykład skanować przez pierwsze tysiąc słów ...

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(); 

Kod ten został zniesiony z WebKit Layout test suite.

+1

To działa! Dzięki! –

2

Nie mam pojęcia, czy to zadziała, czy nie, ale możesz spróbować grać z materiałem do wyboru. Innymi słowy, po zaktualizowaniu textarea (i chce „odświeżyć” to zrobić czerwoną podkreślenia show), może być w stanie zrobić coś takiego:

var length = document.getElementById('TEXTAREA#your').value.length; 
document.getElementById('TEXTAREA#your').setSelectionRange(0, length); 

Można znaleźć trochę więcej na temat użyj wyborów tutaj: How do I select arbitrary text on the page using javascript? lub przez wyszukiwarkę Google.

Uważam, że utworzenie selekcji (lub usunięcie jej po utworzeniu) może wywołać inne zdarzenie przeglądarki, które powoduje odświeżanie pisowni ... ale to tylko pomysł; może zrobić dokładnie to samo, co ustawienie textArea.value (tj. nic).

+0

To jest dobry pomysł. Myślałem także o uruchomieniu kursora w każdym tekście, słowo po słowie, ale prawdopodobnie zajmie to wystarczająco dużo czasu, aby drażnić użytkownika. – sakabako

+0

Daj mi znać, czy to działa, czy nie; teraz mnie ciekawi :-) – machineghost

+0

Będę pisać, jeśli spróbuję, ale jest to niewielka część pośpiesznego projektu. – sakabako

2

Świetna odpowiedź Mark Fowler, tutaj jest poprawa na nim:

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(); 

Więc można uniknąć niepożądanego 1000 numer i może obsługiwać kilka linii.