0

I'm seeing a wierd issue in javascript, or maybe it's because javascript is new to me.

I am trying to allow some action if onkeypress, but only when alphanumeric or special character is pressed. This is my code:

if(e.keyCode>=32 && e.keyCode<=126 ){
    alert(e.keyCode);}
}

It does not alert if I press any special character key like {,]>. am I missing anything here?

Manuel
  • 10,153
  • 5
  • 41
  • 60
Java Hunger
  • 139
  • 2
  • 11

4 Answers4

1

The keyCode for a comma (,) is 188. Could this be why?

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

Kevin Brydon
  • 12,524
  • 8
  • 46
  • 76
1

You have assumed that keyCode gives you an ASCII index, but that is not true. Your range criteria are incorrect due to this assumption.

MDN says:

In a keypress event, the Unicode value of the key pressed is stored in either the keyCode or charCode property, never both. If the key pressed generates a character (e.g. 'a'), charCode is set to the code of that character, respecting the letter case. (i.e. charCode takes into account whether the shift key is held down). Otherwise, the code of the pressed key is stored in keyCode.

keyCode is always set in the keydown and keyup events. In these cases, charCode is never set.

To get the code of the key regardless of whether it was stored in keyCode or charCode, query the which property.

For a list of the keyCode values associated with particular keys, run the example in Example 7: Displaying Event Object Constants and view the resulting HTML table.

Doing as instructed reveals that some of your "special" characters lie outside of the range limits you've specified.

Kevin also pointed out this useful table, but you'd be best off using a more canonical approach to keypress handling.

Community
  • 1
  • 1
Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
1

You need to use the which property in most browsers and keyCode in IE only. You do have the correct event: only keypress will do if you're interested in the character typed rather than the physical key pressed.

Here's my favourite reference for this stuff: http://unixpapa.com/js/key.html

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    var charTyped = String.fromCharCode(charCode);

    alert("Character typed: " + charTyped);
};
Tim Down
  • 318,141
  • 75
  • 454
  • 536
0

You should use which, it should work in both Firefox and Chrome.

Try this:

document.onkeypress = function(e) {
    console.log(e.keyCode + " -- " + e.which + " -- " + e.charCode);

    if(e.which >= 32 && e.which <= 126 ){
        alert(e.which);
    }
};
ATOzTOA
  • 34,814
  • 22
  • 96
  • 117