Get Character value from KeyCode in JavaScript... then trim

Viewed 334634

This is what I have now:

$("input").bind("keydown",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
}

If the e.keyCode may not be an ASCII character (Alt, backspace, del, arrows, etc.)... I would now need to trim these values from value somehow (preferably programmatically - not with lookup tables).

I'm using jQuery.

I must use the keydown event. keyPress doesn't activate for certain keys I need to capture (Esc, del, backspace, etc.).

I cannot use setTimeout to get the input's value. setTimeout(function(){},0) is too slow.

10 Answers

You can also use the read-only property key. It also respects special keys like shift etc. and is supported by IE9.

When a non-printable or special character is pressed, the value will be on of the defined key values like 'Shift' or 'Multiply'.

  • Keyboard     event.key
  • X             -> 'x'
  • Shift+X -> 'X'
  • F5            -> 'F5'

For those of you who came here looking for the actual Unicode character values for a keycode, like I did, here is a function for that. For instance, given the right arrow unicode keycode this will output the visible string \u001B\u005B\u0043

function toUnicode(theString) {
    var unicodeString = '';
    for (var i = 0; i < theString.length; i++) {
        var theUnicode = theString.charCodeAt(i).toString(16).toUpperCase();
        while (theUnicode.length < 4) {
            theUnicode = '0' + theUnicode;
        }
        theUnicode = '\\u' + theUnicode;
        unicodeString += theUnicode;
    }
    return unicodeString;
}
Related