我接受用户在按键时使用event.which键入的内容,并使用String.fromCharCode输出。
用户类型: a
event.which: 67
输出: A
对于我能处理的数字和字母,但在谈论特殊字符时,我会得到完全不同的输出。
用户类型: -
event.which: 189
输出:½
经过研究,我遇到了函数 charCodeAt ,使用这个函数,输出完美,甚至是特殊字符。
不幸的是,我无法使用charCodeAt,因为用户直接从$(文档)输入,而不是从字段输入。
所以,问题是,有没有办法从keyPress event.which获得正确的charCode? p>
如果仍然无法弄清楚我的怀疑,我给你做了Fiddle =)
答案 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));
});
请注意,keydown和keyup提供了一个指示哪个键的代码 按下,而按键表示输入了哪个字符。对于 例如,keydown和keyup将小写的“a”报告为65, 但按键按97。所有人都报告大写“A”为65 事件。由于这种区别,在捕捉特殊击键时 例如箭头键,.keydown()或.keyup()是更好的选择。