Javascript:event.which和charCodeAt一起工作

时间:2012-05-24 20:27:08

标签: javascript jquery keypress

我接受用户在按键时使用event.which键入的内容,并使用String.fromCharCode输出。

用户类型: a
event.which: 67
输出: A

对于我能处理的数字和字母,但在谈论特殊字符时,我会得到完全不同的输出。

用户类型: -
event.which: 189
输出:½

经过研究,我遇到了函数 charCodeAt ,使用这个函数,输出完美,甚至是特殊字符。

不幸的是,我无法使用charCodeAt,因为用户直接从$(文档)输入,而不是从字段输入。

所以,问题是,有没有办法从keyPress event.which获得正确的charCode?

如果仍然无法弄清楚我的怀疑,我给你做了Fiddle =)

2 个答案:

答案 0 :(得分:6)

使用keypress事件代替keyup。它报告字符代码而不是键代码,它在键入实际字符时触发,而不是在释放键时触发,因此它也处理重复的字符。

$('#field').focus().keypress(function(e){
  var key = e.which;
  $("#key").val(String.fromCharCode(key));
});

http://jsfiddle.net/Guffa/QCHt7/1/

编辑:

如果你想在任何地方捕捉按键,你必须在文档上连接事件,以及消耗按键的任何元素。例如,文本框将处理按键,并且不会让它冒泡到父元素。

答案 1 :(得分:2)

您正在使用keyup,一个报告按下了哪个键的事件,而不是输入了哪个字符。您应该使用按键,如下所示:

$(document).keyup(function(e){
    console.log(String.fromCharCode(e.which));
});

来自jquery doc on keypress

  

请注意,keydown和keyup提供了一个指示哪个键的代码   按下,而按键表示输入了哪个字符。对于   例如,keydown和keyup将小写的“a”报告为65,   但按键按97。所有人都报告大写“A”为65   事件。由于这种区别,在捕捉特殊击键时   例如箭头键,.keydown()或.keyup()是更好的选择。