473,499 Members | 1,525 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

keyboard events and dead letters

I'm trying to find what character was pressed, using an accent with a
dead letter, e.g an á, on an input box.

I have made an small program to check the keyboard events keydown,
keypress and keyup, and only the
keyup one is fired two times. The first with a 0 keycode and the
characte code just later. No keydown or keypress events, and it is
not enough information to know what character was really pressed.
It happens with Firefox 2.0.0.14 on Linux. Firefox on Windows works
and behaves in a different way.

The input box is properly modified, so, I guess Firefox understands
whatever key sequence is
receiving from the Operating or the X system.

Any suggestion?

Thanks in advance.
Jun 27 '08 #1
12 4236
Joaquín Zuazo wrote on 18 mei 2008 in comp.lang.javascript:
I'm trying to find what character was pressed, using an accent with a
dead letter, e.g an *, on an input box.

I have made an small program to check the keyboard events keydown,
keypress and keyup, and only the
keyup one is fired two times. The first with a 0 keycode and the
characte code just later. No keydown or keypress events, and it is
not enough information to know what character was really pressed.
It happens with Firefox 2.0.0.14 on Linux. Firefox on Windows works
and behaves in a different way.

The input box is properly modified, so, I guess Firefox understands
whatever key sequence is
receiving from the Operating or the X system.

Any suggestion?
Why not compare the whole content on each keyup with the earlier content?

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)
Jun 27 '08 #2
Thomas 'PointedEars' Lahn wrote:
var charCode = (typeof e.charCode != "undefined"
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);
: charCode));
Jun 27 '08 #3
On 18 mayo, 11:52, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Thomas 'PointedEars' Lahn wrote:
var charCode = (typeof e.charCode != "undefined"
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);

: charCode));
This is the html test page:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<!-- Keyboard events test program, by Joaquín Zuazo -->
<head>
<title>Testing keyboard events</title>
<meta http-equiv="encoding=UTF-8"></meta>

<script language="javascript" type="text/javascript">
window.onload=testkeys;
var checkinput, out;
var title = "Event\t\tkeyCode\t\twhich\t\tcharCode\tfromCharCo de
\tInput Box\n\n";

function testkeys()
{
checkinput = document.getElementById("checkinput");
out = document.getElementById("out");
out.innerHTML = title;
checkinput.onkeydown=check_down;
checkinput.onkeypress=check_press;
checkinput.onkeyup=check_up;
}
function reset_all()
{
out.innerHTML = title;
checkinput.value ="";

}
function output_message(function_name,event)
{
var valid_one = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;
var message = function_name + "\t"
+ ( event.keyCode ? event.keyCode : event.keyCode == 0 ?
0 : "undef" )
+ "\t\t"
+ ( event.which ? event.which : event.wich == 0 ?
0 : "undef" )
+ "\t\t"
+ ( event.charCode ? event.charCode : event.charCode == 0 ?
0 :"undef" )
+ "\t\t"
+ ( valid_one >= 32 ? String.fromCharCode ( valid_one ) :
"Ctrl" )
+ "\t\t"
+ checkinput.value
+ "\n";
out.innerHTML += message;
}
function check_press(e)
{
var event = e ? e : window.event;
output_message("keypress",event);
}
function check_up(e)
{
var event = e ? e : window.event;
output_message("keyup ",event);
}
function check_down(e)
{
var event = e ? e : window.event;
output_message("keydown ",event);
}
</script>
</head>

<body>
<h1>Testing keyboard events</h1>
<button onclick="reset_all();">Reset </button>
<input id="checkinput"></input>
<pre id="out"</pre>
</body>

</html>

This is the return with Firefox 2.0.0.14 with Linux/Fedora
keyup 0 undef 0 Ctrl
keyup 65 65 0 A á
And with Firefox 2.0.0.14 on Windows Xp
keydown
keyup 0 undef 0 Ctrl
keyup 65 65 0 A á
Jun 27 '08 #4
On 18 mayo, 11:52, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Thomas 'PointedEars' Lahn wrote:
var charCode = (typeof e.charCode != "undefined"
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);

: charCode));
This is the test page

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<!-- Keyboard events test program, by Joaquín Zuazo -->
<head>
<title>Testing keyboard events</title>
<meta http-equiv="encoding=UTF-8"></meta>

<script language="javascript" type="text/javascript">
window.onload=testkeys;
var checkinput, out;
var title = "Event\t\tkeyCode\t\twhich\t\tcharCode\tfromCharCo de
\tInput Box\n\n";

function testkeys()
{
checkinput = document.getElementById("checkinput");
out = document.getElementById("out");
out.innerHTML = title;
checkinput.onkeydown=check_down;
checkinput.onkeypress=check_press;
checkinput.onkeyup=check_up;
}
function reset_all()
{
out.innerHTML = title;
checkinput.value ="";

}
function output_message(function_name,event)
{
var valid_one = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;
var message = function_name + "\t"
+ ( event.keyCode ? event.keyCode : event.keyCode == 0 ?
0 : "undef" )
+ "\t\t"
+ ( event.which ? event.which : event.wich == 0 ?
0 : "undef" )
+ "\t\t"
+ ( event.charCode ? event.charCode : event.charCode == 0 ?
0 :"undef" )
+ "\t\t"
+ ( valid_one >= 32 ? String.fromCharCode ( valid_one ) :
"Ctrl" )
+ "\t\t"
+ checkinput.value
+ "\n";
out.innerHTML += message;
}
function check_press(e)
{
var event = e ? e : window.event;
output_message("keypress",event);
}
function check_up(e)
{
var event = e ? e : window.event;
output_message("keyup ",event);
}
function check_down(e)
{
var event = e ? e : window.event;
output_message("keydown ",event);
}
</script>
</head>

<body>
<h1>Testing keyboard events</h1>
<button onclick="reset_all();">Reset </button>
<input id="checkinput"></input>
<pre id="out"</pre>
</body>

</html>
This is the result for the key sequence 'a on Linux, Firefox 2.0.0.14
Event keyCode which charCode fromCharCode Input Box

keyup 0 undef 0 Ctrl
keyup 65 65 0 A á

And this is the result with Firefox 2.0.0.14 on Windows Xp
Event keyCode which charCode fromCharCode Input Box

keydown 222 222 0 Þ
keyup 222 222 0 Þ
keydown 65 65 0 A
keypress 0 225 225 á
keyup 65 65 0
A á

Do you think is this a bug of Firefox?
The problem is that the only place where is kept valid information
with the Linux implementation
is inside the input text box, and hacking this is somewhat dirty.
I really thank any suggestion
Jun 27 '08 #5
JoaquÃ*n Zuazo wrote:
[103 quoted lines]

Yes no keypress events. Only two keyup events as shown.
(sic!)

http://jibbering.com/faq/#FAQ2_3
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Jun 27 '08 #6
On 19 mayo, 01:25, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Joaquín Zuazo wrote:
[103 quoted lines]
Yes no keypress events. Only two keyup events as shown.

(sic!)

http://jibbering.com/faq/#FAQ2_3

PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
There is another place to check keyboard events: http://unixpapa.com/js/testkey.html
that I
have worked before. The result is the same.

Also there is a line I don't understand from your code Is it a typo?
var charCode = (typeof e.charCode != "undefined"
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);
:charCode); <<<<<<<

var charCode = charCode if no other value is available ?

Thanks a lot.
Jun 27 '08 #7
JoaquÃ*n Zuazo wrote:
On 19 mayo, 01:25, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
>JoaquÃ*n Zuazo wrote:
>>[103 quoted lines]
Yes no keypress events. Only two keyup events as shown.
(sic!)
[...]
Could you please trim your quotes?
There is another place to check keyboard events: http://unixpapa.com/js/testkey.html
that I have worked before. The result is the same.

Also there is a line I don't understand from your code Is it a typo?
var charCode = (typeof e.charCode != "undefined"
> ? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);
:charCode); <<<<<<<
Another `)' is missing before the `;'. I had corrected that in a followup
already.
var charCode = charCode if no other value is available ?
Exactly. At this point, the `charCode' variable is already instantiated
(since variable instantiation comes before execution), but not explicitly
initialized yet. So its value is `undefined', the sole value of the
Undefined type. It is a convenient way to avoid reproducing the variable
identifier and to assign `undefined' anyway (i.e. keep the initial
`undefined' value), without having to resort to the `undefined' property of
the Global Object, which is not universally available, or read access to
non-existing properties, which would cause strict script warnings in Geckos.

If you find this too confusing, you may use an explicit universally
available false-value (like `null' or `false') or you can write

var charCode;

if (typeof e.charCode != "undefined")
{
charCode = e.charCode;
}
else if (typeof e.keyCode != "undefined")
{
charCode = e.keyCode;
}

instead.
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Jun 27 '08 #8
[snipped attribution novel]

JoaquÃ*n Zuazo wrote:
Thomas 'PointedEars' Lahn wrote:
>JoaquÃ*n Zuazo wrote:
>>[103 quoted lines]
Yes no keypress events. Only two keyup events as shown.
(sic!)

There is another place to check keyboard events: http://unixpapa.com/js/testkey.html
that I have worked before. The result is the same.
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080129
Iceweasel/2.0.0.12 (Debian-2.0.0.12-0etch1)":

| keydown keyCode=68 (D) which=68 (D) charCode=0
keyIdentifier=undefined
| keypress keyCode=0 which=100 (d) charCode=100 (d)
keyIdentifier=undefined
| keyup keyCode=68 (D) which=68 (D) charCode=0
keyIdentifier=undefined

So probably it's a bug in the Firefox version of your Linux distribution.

Please trim your quotes to the relevant parts.
PointedEars
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm>
Jun 27 '08 #9
On 20 mayo, 11:53, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
[snipped attribution novel]

Joaquín Zuazo wrote:
Thomas 'PointedEars' Lahn wrote:
Joaquín Zuazo wrote:
[103 quoted lines]
>
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080129
Iceweasel/2.0.0.12 (Debian-2.0.0.12-0etch1)":

| keydown keyCode=68 (D) which=68 (D) charCode=0
keyIdentifier=undefined
| keypress keyCode=0 which=100 (d) charCode=100 (d)
keyIdentifier=undefined
| keyup keyCode=68 (D) which=68 (D) charCode=0
keyIdentifier=undefined

So probably it's a bug in the Firefox version of your Linux distribution.
I guess from your message, that you are pressing the key "d". This
works well with my distribution,
and with the same result you are posting.

The problem comes when I need to identify an "á" or an "ö". For that,
I must press two keys, one for
the accent ( the dead key ) and other for the letter itself with an
spanish keyboard, or an english international
keyboard, that provides dead letters also.

Then, only two keyup events are returned for all the keys pressed.

With windows, you get five keyboard events, and all the information
you need to identify
the key.
Thanks a lot for your help.
Jun 27 '08 #10
JoaquÃ*n Zuazo wrote:
Thomas 'PointedEars' Lahn wrote:
>[snipped attribution novel]
JoaquÃ*n Zuazo wrote:
>>Thomas 'PointedEars' Lahn wrote:
JoaquÃ*n Zuazo wrote:
[103 quoted lines]

"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080129
Iceweasel/2.0.0.12 (Debian-2.0.0.12-0etch1)":

| keydown keyCode=68 (D) which=68 (D) charCode=0
keyIdentifier=undefined
| keypress keyCode=0 which=100 (d) charCode=100 (d)
keyIdentifier=undefined
| keyup keyCode=68 (D) which=68 (D) charCode=0
keyIdentifier=undefined

So probably it's a bug in the Firefox version of your Linux distribution.

I guess from your message, that you are pressing the key "d". This
works well with my distribution, and with the same result you are posting.

The problem comes when I need to identify an "á" or an "ö". For that,
I must press two keys, one for the accent ( the dead key ) and other
for the letter itself with an spanish keyboard, or an english international
keyboard, that provides dead letters also.
Sorry, I missed that this time.
Then, only two keyup events are returned for all the keys pressed.
I am afraid I have to confirm this (with only "keypress" suppressed):

| keyup keyCode=0 which=0 charCode=0
keyIdentifier=undefined
| ókeyup keyCode=79 (O) which=79 (O) charCode=0
keyIdentifier=undefined
With windows, you get five keyboard events, and all the information
you need to identify the key.
Yes, indeed (same character, same settings):

| keydown keyCode=221 which=221 charCode=0
keyIdentifier=undefined
| keyup keyCode=221 which=221 charCode=0
keyIdentifier=undefined
| keydown keyCode=79 (O) which=79 (O) charCode=0
keyIdentifier=undefined
| keypress keyCode=0 which=243 charCode=243
keyIdentifier=undefined
| keyup keyCode=79 (O) which=79 (O) charCode=0
keyIdentifier=undefined

So ISTM for Linux you have to watch for a keyup event for a character key
immediately preceded by a keyup event where keyCode == which == 0.
Unfortunately, `charCode' is not available then, and ISTM keyCode/which
is specific to a keyboard layout. But maybe it suffices here.
PointedEars
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm>
Jun 27 '08 #11
So ISTM for Linux you have to watch for a keyup event for a character key
immediately preceded by a keyup event where keyCode == which == 0.
Unfortunately, `charCode' is not available then, and ISTM keyCode/which
is specific to a keyboard layout. But maybe it suffices here.
The problem is than you can not know even what kind of accent was
pressed.
The only place where you can get the information is within the input
box
value.

I think this is a bug of Firefox.
Jun 27 '08 #12
JoaquÃ*n Zuazo wrote:
>So ISTM for Linux you have to watch for a keyup event for a character key
immediately preceded by a keyup event where keyCode == which == 0.
Unfortunately, `charCode' is not available then, and ISTM keyCode/which
is specific to a keyboard layout. But maybe it suffices here.

The problem is than you can not know even what kind of accent was
pressed. The only place where you can get the information is within
the input box value.
Right. So that would mean evaluation after input, using .selectionStart and
..selectionEnd. Not pretty, but works.
I think this is a bug of Firefox.
Or of X? Yes, you should file a bug.
PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f8*******************@news.demon.co.uk>
Jun 27 '08 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
3400
by: Patricio Stegmann | last post by:
Hello, I'm trying to capture all keyboard events from some different web page layouts: framesets with different stuff, like flash or whatever ! The problem I am getting is that only focused...
3
4628
by: Tomasz \Boruh\ Borowiak | last post by:
Does anybody have any idea how to write a c++ console application which simulates the mobile phone keyboard ? for Example: when i write SMS I hit 2 - I get "a" I hit 22 - I get "b" I hit 222...
9
2500
by: skearney | last post by:
When I was in boy scouts, as part of learning Morse code, I was told that the inventor of the typewriter originally put the letter 'e' under the left middle finger, just below its present position....
3
13050
by: Lachlan Hunt | last post by:
Hi, I've been looking up lots of documentation and trying to work out a cross-platform method of capturing a keyboard event and working out which key was pressed. From what I can find, there...
2
2930
by: Santy | last post by:
Hi! Suppose I detected, using DInput, the 1 key is pressed. I wanna get the shift+1 symbol on the current culture-keyboard.... For example.... In my spanish keyboard, shift+1 yields a "!". This...
2
3138
by: wesmanjunk | last post by:
does anyone know how to generate keyboard events in another application? like public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); can be used for mouse...
0
1913
by: luc.saffre | last post by:
Hello, I thought that I should ask here for comments on a blog entry that I wrote some weeks ago. I am sure that other people have been thinking about this, but I didn't yet find them. The...
2
9200
by: hans.duedal | last post by:
The Gecko DOM reference gave me the idea that an onscreen keyboard I was doing should use Key Events, so the user may for instance place a letter anywhere, and such. While this can be handled using...
13
8713
by: andypb123 | last post by:
Hello, The onchange event fires in IE6 in a SELECT element when scrolling through the list with the up and down arrows on the keyboard. In Firefox it only fires after you hit the enter key, which...
0
7130
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7007
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7171
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7220
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
6893
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
1
4918
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4599
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3098
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
1427
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.