By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,569 Members | 1,181 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,569 IT Pros & Developers. It's quick & easy.

programmatic firing of keydown event

P: n/a
Can anyone help me with how to programmatically fire a keydown event in
Firefox?

Sep 8 '06 #1
Share this Question
Share on Google+
9 Replies


P: n/a

runner7 wrote:
Can anyone help me with how to programmatically fire a keydown event in
Firefox?

I don't think it's possible to cause a keyDown event for security
reasons, or if you can I don't think you can set the keyCode. I might
be wrong though, so don't take this as a final answer.

Sep 8 '06 #2

P: n/a
As best as I can tell from "developer.mozilla" and "w3c" sites, the
following code should work in Firefox, but I cannot get it to work:

function keyFire(e) {
var e1=document.createEvent("KeyboardEvent");
e1.initKeyboardEvent("keydown",true,true,window,"U +0009",
DOM_KEY_LOCATION_STANDARD,null);
document.forms[0].elements[0].dispatchEvent(e1);
e.preventDefault();
e.stopPropagation();
}

"U+0009" happens to be for the tab key. Has anyone got a clue?

Sep 9 '06 #3

P: n/a
runner7 wrote:
As best as I can tell from "developer.mozilla" and "w3c" sites, the
following code should work in Firefox, but I cannot get it to work:

function keyFire(e) {
var e1=document.createEvent("KeyboardEvent");
e1.initKeyboardEvent("keydown",true,true,window,"U +0009",
DOM_KEY_LOCATION_STANDARD,null);
document.forms[0].elements[0].dispatchEvent(e1);
e.preventDefault();
e.stopPropagation();
}

"U+0009" happens to be for the tab key. Has anyone got a clue?
<body onKeyDown="
if ( window.event ) {
alert( window.event.keyCode );
}
else
if ( event ) {
alert( event.which );
}
">

--
Bart

Sep 9 '06 #4

P: n/a
I am working on this

http://www.cookdotcom.com/EventTest.html

note FX uses keypress

Sep 9 '06 #5

P: n/a
Thanks guys for your answers, but I think I need to clarify what I am
trying to do. I am not trying to detect a keystroke or what key was
pressed. I am trying to programmatically send the equivalent of a
keystroke to the Firefox browser.

In IE, the problem is trivial, because window.event.keyCode can be set,
but in Firefox the event.which property appears to be read only.
Thanks to anyone for any further insight on this matter.

Sep 9 '06 #6

P: n/a
runner7 wrote:
Thanks guys for your answers, but I think I need to clarify what I am
trying to do. I am not trying to detect a keystroke or what key was
pressed. I am trying to programmatically send the equivalent of a
keystroke to the Firefox browser.
That equivalent is actually just the decimal code point of the
character.

alert('W'.charCodeAt(0));

should show you '87', the same cp as when pressing 'W' in my previous
snippet. There are some things you should be aware of though (e.g.
upper/lower case), but you can send/retrieve such values wherever you
want.
In IE, the problem is trivial, because window.event.keyCode can be set,
but in Firefox the event.which property appears to be read only.
I don't think this is correct. AFAIK, keyCode should be read-only
too.

Your problem is more fundamental. You want to make javascript think the
user pressed a key, while he actually didn't press it. It's spoofing by
definition - browsers are right to complain about this kind of
trickery. My gut feeling is that you should give up your plan and
rethink your coding strategy.

And honestly I can't think of any good reason why you would want to
fake a keystroke, besides theoretical or hacking motives.

--
Bart

Sep 10 '06 #7

P: n/a
Bart Van der Donck wrote:
In IE, the problem is trivial, because window.event.keyCode can be set,
but in Firefox the event.which property appears to be read only.

I don't think this is correct. AFAIK, keyCode should be read-only
too.
(AFAIK==as far as I know?)

The following code works in IE to replace an "enter" keystroke with a
"tab" keystroke in the first text box:

<html>
<head><title></title>
<script type="text/javascript">
function replace(e) {
if (e.keyCode==13) e.keyCode=9
}
</script>
</head>
<body>
<form>
<input onkeydown="replace(event)" /><br />
<input />
</form>
</body>
</html>

If you replace the "keyCode" property with the "which" property for
Firefox, the code does not work in Firefox.

Bart Van der Donck wrote:
Your problem is more fundamental. You want to make javascript think the
user pressed a key, while he actually didn't press it. It's spoofing by
definition - browsers are right to complain about this kind of
trickery. My gut feeling is that you should give up your plan and
rethink your coding strategy.

And honestly I can't think of any good reason why you would want to
fake a keystroke, besides theoretical or hacking motives.
The purpose is for a data entry application, such as when using the
numeric keypad to enter data. Typically, the "enter" key will work
like a "tab" key until the last field on the form. Using
String.fromCharCode(9) to append to the fields's value only appends a
"tab" character just like in a word processing application, but does
not cause the cursor to move to the next field. Any ideas on how to
make "enter" work like "tab" in Firefox?

Sep 10 '06 #8

P: n/a
runner7 wrote:
Bart Van der Donck wrote:
<snip>
>And honestly I can't think of any good reason why you
would want to fake a keystroke, besides theoretical or
hacking motives.

The purpose is for a data entry application, such as when
using the numeric keypad to enter data. Typically, the
"enter" key will work like a "tab" key until the last
field on the form.
Is that typical of web browsers? That has not been my experience.
Using String.fromCharCode(9) to append to the fields's
value only appends a "tab" character just like in a
word processing application, but does not cause the cursor
to move to the next field. Any ideas on how to
make "enter" work like "tab" in Firefox?
While fixating on the insoluble key event problem you are falling to
notice that what you want to do is focus the next field in the tabbing
sequence in response to a key event. That can certainly be done (on the
limited number of browsers you seem interested in) by identifying the
significant key event, cancelling it, identifying the next filed and
explicitly calling its - focus - method. It may not be as simple as
changing the key event, or faking them, but when neither of those will
do it is a viable alternative.

Richard.
Sep 10 '06 #9

P: n/a
runner7 wrote:
The purpose is for a data entry application, such as when
using the numeric keypad to enter data. Typically, the
"enter" key will work like a "tab" key until the last
field on the form.

Richard Cornford wrote:
Is that typical of web browsers? That has not been my experience.
I meant desktop data-entry applications. This one happens to have a
browser interface.

Richard Cornford wrote:
That can certainly be done (on the
limited number of browsers you seem interested in) by identifying the
significant key event, cancelling it, identifying the next filed and
explicitly calling its - focus - method.
Thank you. That is the solution. I wish I could say I had thought of
it. I am still wondering about the DOM 3 "KeyboardEvent" though, which
developer.mozilla.org says is supposed to be supported by Firefox's
Gecko layout engine.

Sep 11 '06 #10

This discussion thread is closed

Replies have been disabled for this discussion.