Thread View: pl.comp.lang.javascript
3 messages
3 total messages
Started by Tomasz
Mon, 04 Jan 2010 19:29
Emulacja naciśnięcia strzałki
Author: Tomasz
Date: Mon, 04 Jan 2010 19:29
Date: Mon, 04 Jan 2010 19:29
47 lines
2812 bytes
2812 bytes
Witam,
Postaram się krótko i jasno...
Sprawa dotyczy Firefoksa (testowane w 3.5).
Robię edytor pracujący w FF, który przechwytuje naciśnięte
klawisze(keypress) i wykonuje różne operacje na DOM.
Całość pracuje w designMode (<body designMode = "On">). Niektórych
klawiszy wolałbym nie obsługiwać, a konkretnie "strzałek". Ponieważ
skrypty wykonują się w różnym czasie, zrobiłem sobie własną kolejkę, tak
aby zachować właściwą kolejność obsługi klawiszy. W przypadku strzałek
miałem nadzieję, że zadziała takie coś:
if (klawisz.keyCode >=37 && klawisz.keyCode <=40) { // strzalki
evt =
document.getElementById("Editable").contentDocument.createEvent("KeyboardEvent");
evt.initKeyEvent(
"keypress", // in DOMString typeArg,
true, // in boolean canBubbleArg,
true, // in boolean cancelableArg,
null, // in nsIDOMAbstractView viewArg,
Specifies UIEvent.view. This value may be null.
false, // in boolean ctrlKeyArg,
false, // in boolean altKeyArg,
false, // in boolean shiftKeyArg,
false, // in boolean metaKeyArg,
klawisz.keyCode, // in unsigned long keyCodeArg,
0); // in unsigned long charCodeArg);
document.getElementById("Editable").contentDocument.documentElement.dispatchEvent(evt);
Niestety nie działa i nie wiem czemu. Event handler wykrywa
"naciśnięcie" klawisza (filtruję, żeby nie dodać ponownie do kolejki),
ale kursor nie rusza.
Zrobiłbym ręczną obsługę, ale tylko Left i Right mógłbym rozsądnie
zaprogramować.
Przeguglałem dokładnie i nic...
Pozdrawiam
Tomasz
Re: Emulacja naciśnięcia strzałki
Author: Paweł Arciszewski
Date: Mon, 11 Jan 2010 14:01
Date: Mon, 11 Jan 2010 14:01
52 lines
2999 bytes
2999 bytes
W dniu 2010-01-04 20:29, Tomasz pisze:
> Witam,
> Postaram się krótko i jasno...
> Sprawa dotyczy Firefoksa (testowane w 3.5).
> Robię edytor pracujący w FF, który przechwytuje naciśnięte
> klawisze(keypress) i wykonuje różne operacje na DOM.
> Całość pracuje w designMode (<body designMode = "On">). Niektórych
> klawiszy wolałbym nie obsługiwać, a konkretnie "strzałek". Ponieważ
> skrypty wykonują się w różnym czasie, zrobiłem sobie własną kolejkę, tak
> aby zachować właściwą kolejność obsługi klawiszy. W przypadku strzałek
> miałem nadzieję, że zadziała takie coś:
>
> if (klawisz.keyCode >=37 && klawisz.keyCode <=40) { // strzalki
> evt =
> document.getElementById("Editable").contentDocument.createEvent("KeyboardEvent");
>
> evt.initKeyEvent(
> "keypress", // in DOMString typeArg,
> true, // in boolean canBubbleArg,
> true, // in boolean cancelableArg,
> null, // in nsIDOMAbstractView viewArg, Specifies UIEvent.view. This
> value may be null.
> false, // in boolean ctrlKeyArg,
> false, // in boolean altKeyArg,
> false, // in boolean shiftKeyArg,
> false, // in boolean metaKeyArg,
> klawisz.keyCode, // in unsigned long keyCodeArg,
> 0); // in unsigned long charCodeArg);
> document.getElementById("Editable").contentDocument.documentElement.dispatchEvent(evt);
>
>
> Niestety nie działa i nie wiem czemu. Event handler wykrywa
> "naciśnięcie" klawisza (filtruję, żeby nie dodać ponownie do kolejki),
> ale kursor nie rusza.
> Zrobiłbym ręczną obsługę, ale tylko Left i Right mógłbym rozsądnie
> zaprogramować.
>
> Przeguglałem dokładnie i nic...
>
> Pozdrawiam
> Tomasz
Nie rozumiem czemu przechwytujesz strzałkę i rzucasz nową.
W każdym razie zablokowanie domyślnej obsługi strzałek można osiągnąć tak:
if (klawisz.keyCode >=37 && klawisz.keyCode <=40) { // strzalki
klawisz.preventDefault();
}
Pozdrawiam,
Paweł Arciszewski
Re: Emulacja naciśnięcia strzałki
Author: Tomasz
Date: Thu, 21 Jan 2010 21:33
Date: Thu, 21 Jan 2010 21:33
18 lines
1932 bytes
1932 bytes
Paweł Arciszewski pisze:
> Nie rozumiem czemu przechwytujesz strzałkę i rzucasz nową.
> W każdym razie zablokowanie domyślnej obsługi strzałek można osiągnąć tak:
>
> if (klawisz.keyCode >=37 && klawisz.keyCode <=40) { // strzalki
> klawisz.preventDefault();
> }
No właśnie muszę. A czemu to napisałem: "Ponieważ skrypty wykonują się w
różnym czasie, zrobiłem sobie własną kolejkę, tak aby zachować właściwą
kolejność obsługi klawiszy."
Chodzi o to, że naciśnięcie każdego klawisza powoduje wywołanie akcji
podpiętej pod handler *asynchronicznie*. Krótko mówiąc strzałka nie
będzie oczekiwać na zakończenie obsługi np. backspace (która może trwać,
np. 500 ms).
Pozdrawiam
Tomasz
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads