🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#49644
Author: Tomasz
Date: Mon, 04 Jan 2010 19:29
47 lines
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
#49645
Author: Paweł Arciszewski
Date: Mon, 11 Jan 2010 14:01
52 lines
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
#49646
Author: Tomasz
Date: Thu, 21 Jan 2010 21:33
18 lines
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