我在 javascript 中看到了一个奇怪的问题,或者可能是因为 javascript 对我来说是新的。
我试图在 onkeypress 时允许一些操作,但仅在按下字母数字或特殊字符时。这是我的代码:
if(e.keyCode>=32 && e.keyCode<=126 ){
alert(e.keyCode);}
}
如果我按下任何特殊字符键,它不会发出警报,比如{,]>.
我在这里遗漏了什么吗?
我在 javascript 中看到了一个奇怪的问题,或者可能是因为 javascript 对我来说是新的。
我试图在 onkeypress 时允许一些操作,但仅在按下字母数字或特殊字符时。这是我的代码:
if(e.keyCode>=32 && e.keyCode<=126 ){
alert(e.keyCode);}
}
如果我按下任何特殊字符键,它不会发出警报,比如{,]>.
我在这里遗漏了什么吗?
keyCode
逗号 ( ) 是 188。这,
可能是为什么?
http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
您假设这keyCode
会给您一个 ASCII 索引,但事实并非如此。由于此假设,您的范围标准不正确。
在一个
keypress
事件中,按下的键的 Unicode 值存储在keyCode
orcharCode
属性中,而不是两者。如果按下的键生成一个字符(例如'a'),charCode
则设置为该字符的代码,尊重字母大小写。(即charCode
考虑是否按住shift键)。否则,按键的代码存储在keyCode
.
keyCode
始终在 keydown 和 keyup 事件中设置。在这些情况下,永远不会设置 charCode。要获取密钥的代码,无论它是否存储在
keyCode
orcharCode
中,请查询 which 属性。有关与特定键关联的 keyCode 值的列表,请运行示例 7:显示事件对象常量中的示例并查看生成的 HTML 表。
按照指示进行操作表明您的某些“特殊”字符超出了您指定的范围限制。
您需要which
在大多数浏览器和keyCode
IE 中使用该属性。您确实有正确的事件:仅keypress
当您对键入的字符而不是按下的物理键感兴趣时才会这样做。
这是我最喜欢的参考资料:http: //unixpapa.com/js/key.html
document.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
var charTyped = String.fromCharCode(charCode);
alert("Character typed: " + charTyped);
};
您应该使用which
,它应该可以在 Firefox 和 Chrome 中使用。
试试这个:
document.onkeypress = function(e) {
console.log(e.keyCode + " -- " + e.which + " -- " + e.charCode);
if(e.which >= 32 && e.which <= 126 ){
alert(e.which);
}
};