JavaScript KeyCode与CharCode

Rem*_*tec 42 javascript keycode

问题:

  • 将HTML输入中允许的字符限制为仅限AZ AZ.
  • 对于业务需求,这需要在KeyPress上完成,这样才不允许角色出现在输入中.
  • Tab,enter,arrows,backspace,shift都是允许的.用户必须能够自由地移入和移出文本框,删除字符等.

这是我的代码的起点......

var keyCode = (e.keyCode ? e.keyCode : e.which);
Run Code Online (Sandbox Code Playgroud)

但是,我在keyCode中获得的每个值都不对应于我在网络上看到的任何字符图表.例如,字符"h"给出返回代码104.

KeyCode与CharCode不同吗?哪个代码包含控制字符?我需要转换吗?

如何将输入限制为az AZ并允许JavaScript中需要的键?

Tim*_*own 64

您可以在以下页面找到所有问题的答案.

......但总结如下:

  • 可以可靠地获取字符信息(与密钥代码信息相对)的唯一事件是keypress事件.
  • 在这种情况keypress下,除IE <= 8之外的所有浏览器都将字符代码存储在事件的which属性中.大多数但不是所有这些浏览器也将字符代码存储在charCode属性中.
  • 在这种情况keypress下,IE <= 8将字符代码存储在keyCode属性中.

这意味着获取对应于按键的字符代码,假设按键事件对象存储在名为的变量中,以下内容将在任何地方都有效e:

var charCode = (typeof e.which == "number") ? e.which : e.keyCode
Run Code Online (Sandbox Code Playgroud)

这通常会返回一个字符代码,否则为0.在某些情况下,如果不应该,您将获得非零值:

  • 在Opera <10,50键Insert,Delete,HomeEnd
  • 在Konqueror的最新版本中,用于非字符键.

第一个问题的解决方法有点涉及,并且也需要使用该keydown事件.


nic*_*tic 10

好悲伤.KeyboardEvent.[key,char,keyCode,charCode,它们]已被弃用,或者根据Mozilla的API文档目前都有未解决的错误 - https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.甚至JQuery也会在这个问题上贬低它,让用户知道它的问题https://api.jquery.com/keydown/.


Han*_*-Oh 5

实际上,104是小写'h'的ASCII码.要获得键入的字符onkeypress的ASCII代码,您可以使用e.which || e.keyCode,并且您不必担心按住键,因为对于键入的文本,keypress在所有浏览器中自动重复(根据优秀的http:// unixpapa.com/js/key.html).

所以你真正需要的是:

<input id="textbox">

<script type="text/javascript">
document.getElementById('textbox').onkeypress = function(e){
  var c = e.which || e.keyCode;
  if((c > 31 && c < 65) || (c > 90 && c < 97) || (c > 122 && c !== 127))
    return false;
};
</script>
Run Code Online (Sandbox Code Playgroud)

试一试:http://jsfiddle.net/wcDCJ/1/

(ASCII码来自http://en.wikipedia.org/wiki/Ascii)