Pomimo wielu artykułów na temat SO na temat symulacji naciśnięć klawiszy (keydown/keypress) w JS, żadne rozwiązanie nie działa z przeglądarkami, których używam (Firefox ESR 17.0. 7, Chrome 28.0.1500.72, IE 10). Rozwiązania, które testowałem zostały zaczerpnięte z here, here i here.JavaScript: Symulowanie kluczowych zdarzeń w polu tekstowym/wprowadzeniu
Co próbuję zrobić, to zasymulować JAKIKOLWIEK naciśnięcie klawisza w polu tekstowym/wprowadzeniu. Chociaż mogę dodawać/usuwać znaki bezpośrednio zmieniające "wartość", nie widzę opcji, oprócz symulacji wejścia dla klawiszy takich jak "Up", "Down", "Home" i kilka innych.
Zgodnie z documentation, powinno być proste. Na przykład:
var e = document.createEvent("KeyboardEvent");
if (e.initKeyboardEvent) { // Chrome, IE
e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, 13, 0);
}
document.getElementById("text").dispatchEvent(e);
rzeczywiście odpala zdarzenie klucza "Enter", a mój przewodnik może go złapać. Nie wpływa to jednak w żaden sposób na tekst - nowy wiersz się nie pojawia. To samo dotyczy innych kodów klawiszy: znaki nie pojawiają się, strzałki nie zmieniają położenia karetki, itp.
Poszerzyłem kod o Orwellophile i wysłałem go pod numer http://jsfiddle.net/npF3d/4/, aby każdy mógł grać z kodem. W moich przeglądarkach żaden przycisk nie powoduje żadnego efektu na obszarze tekstowym w żadnych warunkach.
Byłbym wdzięczny za pomoc w tej sprawie.
OK, miałem to samo uczucie, że może to być zrobione celowo ze względów bezpieczeństwa. Od Q/A: edycja tekstu nie stanowi problemu, problem polega na symulacji "Up", "Down", "Home" i tym podobnych ... – lexasss
te mogą zostać zaimplementowane po odtworzeniu textarea/input jako węzeł blokowy zawierający wbudowane węzły dla każdego znaku z dopasowanym zawijaniem, wielkością i stylem, a następnie obliczanie wszystkich różnych rectów, aby znaleźć miejsce, w którym chcesz skończyć. Nie mogę sobie wyobrazić, że jest to łatwe do wdrożenia ... być może lepszym sposobem byłoby użycie czcionki o stałej szerokości, sprawdzanie, gdzie był poprzedni znak nowej linii, a następnie liczenie znaków. –
Dzięki. Jednak symuluję dane wejściowe na trzecich stronach, takich jak google.com. Moja wirtualna klawiatura jest zaimplementowana jako rozszerzenie Chrome i musi umożliwiać użytkownikom wpisywanie i modyfikowanie tekstu w formularzach na dowolnej stronie przy użyciu tylko tej klawiatury. Byłoby wielkim rozczarowaniem, gdyby niektóre funkcje zostały usunięte. – lexasss