我只想知道与可输入字符对应的JavaScript keyCode
的范围;或者,不可键入(控制)字符的范围,如退格,转义,命令,移位等,所以我可以忽略它们。
我问的原因是调用String.fromCharCode()
导致控制键出现奇数字符。例如,左侧命令为“[”,左箭头为“%”。这样的怪异。
答案 0 :(得分:81)
Keydown将为您提供按下的键的keyCode,无需任何修改。
$("#keypresser").keydown(function(e){
var keycode = e.keyCode;
var valid =
(keycode > 47 && keycode < 58) || // number keys
keycode == 32 || keycode == 13 || // spacebar & return key(s) (if you want to allow carriage returns)
(keycode > 64 && keycode < 91) || // letter keys
(keycode > 95 && keycode < 112) || // numpad keys
(keycode > 185 && keycode < 193) || // ;=,-./` (in order)
(keycode > 218 && keycode < 223); // [\]' (in order)
return valid;
});
只有数字键,字母键和空格键才会有与String.fromCharCode
相关的键码,因为它使用的是Unicode值。
Keypress将是输入文本的charCode表示。请注意,如果由于按键没有“打印”文本,则不会触发此事件。
$("#keypresser").keypress(function(e){
var charcode = e.charCode;
var char = String.fromCharCode(charcode);
console.log(char);
});
http://jsfiddle.net/LZs2D/1/将演示这些是如何工作的。
KeyUp的行为与KeyDown类似。
答案 1 :(得分:14)
只是为了后台,只要按下字符键,“keypress”事件就会为您提供 charCode 属性。
Editor.addEventListener('keypress', function(event){
if (event.charCode) {
//// character key
console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
} else {
//// control key
}
但是,“按键”事件并不会捕获每次按键 - 在“按键”事件发生之前会触发几个按键。
相反,“keydown”事件将捕获每次击键,但它没有 charCode 属性。那么我们如何判断它是否是一个字符键呢?检查每个键击是否 keyCode 在多个范围的下限和上限内是不是最佳效率。我怀疑ASCII范围之外的字符也存在问题。
我的方法是检查事件“key”属性的长度。 “key”属性是“keyCode”的替代,用于确定按下了哪个键。对于控制键,“key”属性为描述性(例如“rightArrow”,“F12”,“return”等)。对于字符键,字符键的“key”属性为只是字符(例如“a”,“A”,“〜”,“\”等)。因此,对于每个字符键,“key”属性的长度将为1;而控制字符的长度大于1。
Editor.addEventListener('keydown', function(event){
if (event.key.length == 1){
//// character key
} else {
//// control key
}
})
答案 2 :(得分:4)
本文列出了keyCodes
中的Javascript
:
http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
答案 3 :(得分:1)
您还可以为此使用RegEx:
$(".input").keyup(function (event) {
if (event.key.match(/^[\d\w]$/i)) {
// put function to trigger when a digit or a word character is pressed here
}
i
标志使表达式不区分大小写。
答案 4 :(得分:0)
我注意到所有长度为1('A','B',数字,符号)的字符都可以打印 所以我只用。 我也将这种解决方案用于非英语字符:
if(e.key.length==1)
print();