0

我在 javascript 中看到了一个奇怪的问题,或者可能是因为 javascript 对我来说是新的。

我试图在 onkeypress 时允许一些操作,但仅在按下字母数字或特殊字符时。这是我的代码:

if(e.keyCode>=32 && e.keyCode<=126 ){
    alert(e.keyCode);}
}

如果我按下任何特殊字符键,它不会发出警报,比如{,]>.我在这里遗漏了什么吗?

4

4 回答 4

1

keyCode逗号 ( ) 是 188。这,可能是为什么?

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

于 2013-01-28T13:18:16.233 回答
1

您假设这keyCode会给您一个 ASCII 索引,但事实并非如此。由于此假设,您的范围标准不正确。

MDN 说:

在一个keypress事件中,按下的键的 Unicode 值存储在keyCodeorcharCode属性中,而不是两者。如果按下的键生成一个字符(例如'a'),charCode则设置为该字符的代码,尊重字母大小写。(即charCode考虑是否按住shift键)。否则,按键的代码存储在keyCode.

keyCode始终在 keydown 和 keyup 事件中设置。在这些情况下,永远不会设置 charCode。

要获取密钥的代码,无论它是否存储在keyCodeorcharCode中,请查询 which 属性。

有关与特定键关联的 keyCode 值的列表,请运行示例 7:显示事件对象常量中的示例并查看生成的 HTML 表。

按照指示进行操作表明您的某些“特殊”字符超出了您指定的范围限制。

Kevin 还指出了这个有用的表格,但您最好使用更规范的 按键处理方法。

于 2013-01-28T13:28:05.140 回答
1

您需要which在大多数浏览器和keyCodeIE 中使用该属性。您确实有正确的事件:仅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);
};
于 2013-01-28T13:36:11.587 回答
0

您应该使用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);
    }
};
于 2013-01-28T13:49:25.263 回答