键码和charcode

为什么人们会这样写?

e.keyCode ? e.keyCode : e.charCode 

有些人也使用e.which

有人可以解释吗?

一致地处理关键事件并不容易。

首先,有两种不同types的代码:键盘代码(代表用户按下键盘上的键的数字)和字符代码(代表Unicode字符的数字)。 您只能在keypress事件中可靠地获取字符代码。 不要试图获取keyupkeydown事件的字符代码。

其次,在keypress事件中,您可以获得不同的值集合,以及在keyupkeydown事件中获得的值。

我推荐这个页面作为一个有用的资源。 总结如下:

如果您对检测用户input字符感兴趣,请使用keypress事件。 IE浏览器奇异地只将字符代码存储在keyCode而所有其他浏览器将其存储在which 。 一些(但不是全部)浏览器也将其存储在charCode和/或keyCode 。 示例按键处理程序:

 function(evt) { evt = evt || window.event; var charCode = evt.which || evt.keyCode; var charStr = String.fromCharCode(charCode); alert(charStr); } 

如果您有兴趣检测不可打印的键(例如光标键),请使用keydown事件。 这里keyCode总是要使用的属性。 请注意, keyup事件具有相同的属性。

 function(evt) { evt = evt || window.event; var keyCode = evt.keyCode; // Check for left arrow key if (keyCode == 37) { alert("Left arrow"); } } 

这是一个有条件的陈述。

如果浏览器支持e.keyCode,则使用e.keyCode或e.charCode。

它与…类似

 var code = event.keyCode || event.charCode 

event.keyCode :返回按键事件中的非字符键的Unicode值,或任何其他types的键盘事件中的任何键。

event.charCode :返回按键事件期间按下的字符键的Unicode值。

keyCode,它们代表按数字值forms的实际键盘键。 这两个原因都存在,keyCode在Internet Explorer中可用,而在FireFox等W3C浏览器中可用。

charCode是相似的,但在这种情况下,您可以检索按下的字符的Unicode值。 例如,字母“A”。

JavaScriptexpression式:

 var keyCode = e.keyCode ? e.keyCode : e.charCode; 

基本上说:

如果e.keyCode属性存在,则将variableskeyCode设置为其值。 否则,将variableskeyCode设置为e.charCode属性的值。

请注意,检索keyCode或charCode属性通常涉及计算IE和W3C中的事件模型之间的差异。 有些需要编写如下代码:

 /* get the event object: either window.event for IE or the parameter e for other browsers */ var evt = window.event ? window.event : e; /* get the numeric value of the key pressed: either event.keyCode for IE for e.which for other browsers */ var keyCode = evt.keyCode ? evt.keyCode : e.which; 

编辑 :更正我的解释charCode根据Tor Haugen的意见。

好的,这里是解释。

e.keyCode – 用于获取表示键盘上的键的数字

e.charCode – 表示键盘上的键的Unicode字符的数字

e.which – (特定于jQuery)是jQuery中引入的一个属性(不要在普通的javascript中使用)

以下是获取keyCode和charCode的代码片段

 <script> // get key code function getKey(event) { event = event || window.event; var keyCode = event.which || event.keyCode; alert(keyCode); } // get char code function getChar(event) { event = event || window.event; var keyCode = event.which || event.keyCode; var typedChar = String.fromCharCode(keyCode); alert(typedChar); } </script> 

在JavaScript中获取keyCode和charCode的实例。

我(是我自己的人)写了这个声明,因为我想要检测用户在不同的浏览器上键入的键。

以firefox为例,字符有> 0 charCode和0 keyCode,而箭头和退格键等则有> 0 keyCode和0 charCode。

然而,使用这种说法可能会有问题,因为“碰撞”是可能的。 例如,如果要区分Delete和Period键,则这将不起作用,因为Delete键的keyCode = 46,Period的charCode = 46。

使用jQuery添加属性event.which以避免浏览器差异。 看文档 。

如果您不使用jQuery,那么which属性将是未定义的。