7

我获取用户在按键上使用 event.which 键入的内容,并使用 String.fromCharCode 输出。

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

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

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

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

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

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

如果仍然无法弄清楚我的疑问,我给你做了一个小提琴=)

4

2 回答 2

6

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

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

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

编辑:

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

于 2012-05-24T20:38:00.803 回答
2

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

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

来自keypress 上的 jquery 文档

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

于 2012-05-24T21:03:25.750 回答