HighDots Forums  

keyboard events and dead letters

Javascript JavaScript language (comp.lang.javascript)


Discuss keyboard events and dead letters in the Javascript forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Joaquín Zuazo
 
Posts: n/a

Default keyboard events and dead letters - 05-17-2008 , 08:21 PM






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.

Reply With Quote
  #2  
Old   
Evertjan.
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 02:24 AM






Joaquín Zuazo wrote on 18 mei 2008 in comp.lang.javascript:

Quote:
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)


Reply With Quote
  #3  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 04:27 AM



JoaquÃ*n Zuazo wrote:
Quote:
I'm trying to find what character was pressed, using an accent with a
dead letter, e.g an á, on an input box.
Unless you need to find out whether a dead*key* was used, it does not matter.

Quote:
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?
Current implementations of keyboard events can be considered a madness
(google for "keyboard events"), but fortunately there appears to be a method
to the madness ;-)

For character input, `keydown' and `keyup' are the wrong events and event
handler attributes to look for; use `keypress'.

For character input, `keyCode' is the wrong property to look for in
Mozilla-based UAs; use `charCode' which yields the Unicode code point
of the character/glyph that is about to be put in:

http://developer.mozilla.org/en/docs/DOM:event.charCode

(BTW: Netscape 4 does not appear to support Unicode character input.)

In MSHTML-based UAs like IE, you have to look for the `keyCode' property
of the `keypress' event object instead.

http://msdn.microsoft.com/en-us/libr...27(VS.85).aspx

Opera 9.27 supports MSHTML's keyboard event model. Safari 3.1 supports both.

In order to avoid error-prone UA/DOM sniffing, you may use the following:

// keypress event listener
function(e) {
if (!e) e = window.event;
if (e)
{
var charCode = (typeof e.charCode != "undefined"
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);
if (charCode)
{
// ...
}
}
}

[de] <http://brain4.de/programmierecke/js/tastatur.php> greatly helps to see
the differences between the keyboard event models.


HTH

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


Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 04:52 AM



Thomas 'PointedEars' Lahn wrote:
Quote:
var charCode = (typeof e.charCode != "undefined"
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);
: charCode));


Reply With Quote
  #5  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 05:43 PM



JoaquÃ*n Zuazo wrote:
Quote:
On 18 mayo, 11:52, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) 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:
Why have you not just used my code or the reliable test site I pointed you
to instead of this, sorry, mostly clueless nonsense?

Quote:
checkinput.onkeydown=check_down;
checkinput.onkeypress=check_press;
checkinput.onkeyup=check_up;
Avoid those proprietary features, use event handler attributes or DOM 2
Event methods when possible.

Quote:
var valid_one = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;
I had chosen the order of evaluation with purpose. Mozilla and MSHTML
support `keyCode' but implement it differently; only Mozilla and Safari
support charCode which is equivalent to MSHTML's keyCode *on keypress*.

If you reverse evaluation order like this, you get misleading results.
Especially, String.fromCharCode(event.keyCode) is not supposed to return
the character that would have been/has been input in all cases.

Quote:
+ "\t\t"
+ ( event.which ? event.which : event.wich == 0 ?
0 : "undef" )
Here is also a typo.

Quote:
+ "\t\t"
+ ( valid_one >= 32 ? String.fromCharCode ( valid_one ) :
"Ctrl" )
See above.

Quote:
[..]
out.innerHTML += message;
There is no need for proprietary error-prone `innerHTML' here.

Quote:
function check_press(e)
{
var event = e ? e : window.event;
See my code for a more efficient and reliable feature test.

Quote:
/script
/head

body
h1>Testing keyboard events</h1
button onclick="reset_all();">Reset </button
The `button' element should not be used when the `input' element with type
`button' suffices.

Quote:
input id="checkinput"></input
The end tag for the `input' element is forbidden in HTML, per the
Specification's normative prose.

Quote:
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 á
I don't see `keypress' which my followup was all about. Are you saying
`keypress' never occurs there? (I can confirm the opposite for Fx 2.0.0.14
on Windows XP.) Double-check with fixed test script code, Valid markup and
the `keypress' attribute, or with the test case I pointed you to.


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


Reply With Quote
  #6  
Old   
Joaquín Zuazo
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 06:02 PM



On 19 mayo, 00:43, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) de>
wrote:
Quote:
Joaquín Zuazo wrote:
On 18 mayo, 11:52, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) 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:

Why have you not just used my code or the reliable test site I pointed you
to instead of this, sorry, mostly clueless nonsense?

checkinput.onkeydown=check_down;
checkinput.onkeypress=check_press;
checkinput.onkeyup=check_up;

Avoid those proprietary features, use event handler attributes or DOM 2
Event methods when possible.

var valid_one = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;

I had chosen the order of evaluation with purpose. Mozilla and MSHTML
support `keyCode' but implement it differently; only Mozilla and Safari
support charCode which is equivalent to MSHTML's keyCode *on keypress*.

If you reverse evaluation order like this, you get misleading results.
Especially, String.fromCharCode(event.keyCode) is not supposed to return
the character that would have been/has been input in all cases.

+ "\t\t"
+ ( event.which ? event.which : event.wich == 0 ?
0 : "undef" )

Here is also a typo.

+ "\t\t"
+ ( valid_one >= 32 ? String.fromCharCode ( valid_one ) :
"Ctrl" )

See above.

[..]
out.innerHTML += message;

There is no need for proprietary error-prone `innerHTML' here.

function check_press(e)
{
var event = e ? e : window.event;

See my code for a more efficient and reliable feature test.

/script
/head

body
h1>Testing keyboard events</h1
button onclick="reset_all();">Reset </button

The `button' element should not be used when the `input' element with type
`button' suffices.

input id="checkinput"></input

The end tag for the `input' element is forbidden in HTML, per the
Specification's normative prose.

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 á

I don't see `keypress' which my followup was all about. Are you saying
`keypress' never occurs there? (I can confirm the opposite for Fx 2.0.0.14
on Windows XP.) Double-check with fixed test script code, Valid markup and
the `keypress' attribute, or with the test case I pointed you to.

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
Yes no keypress events. Only two keyup events as shown.


Reply With Quote
  #7  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 06:25 PM



JoaquÃ*n Zuazo wrote:
Quote:
[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


Reply With Quote
  #8  
Old   
Joaquín Zuazo
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 06:56 PM



On 19 mayo, 01:25, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) de>
wrote:
Quote:
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"
Quote:
? e.charCode
: (typeof e.keyCode != "undefined"
? e.keyCode
: charCode);
:charCode);

var charCode = charCode if no other value is available ?

Thanks a lot.


Reply With Quote
  #9  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-18-2008 , 07:59 PM



JoaquÃ*n Zuazo wrote:
Quote:
On 19 mayo, 01:25, Thomas 'PointedEars' Lahn <PointedE... (AT) web (DOT) 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?

Quote:
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.

Quote:
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


Reply With Quote
  #10  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: keyboard events and dead letters - 05-20-2008 , 04:53 AM



[snipped attribution novel]

JoaquÃ*n Zuazo wrote:
Quote:
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)":

Quote:
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>


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.