键码和charcode
为什么人们会这样写?
e.keyCode ? e.keyCode : e.charCode
有些人也使用e.which
有人可以解释吗?
一致地处理关键事件并不容易。
首先,有两种不同types的代码:键盘代码(代表用户按下键盘上的键的数字)和字符代码(代表Unicode字符的数字)。 您只能在keypress
事件中可靠地获取字符代码。 不要试图获取keyup
和keydown
事件的字符代码。
其次,在keypress
事件中,您可以获得不同的值集合,以及在keyup
或keydown
事件中获得的值。
我推荐这个页面作为一个有用的资源。 总结如下:
如果您对检测用户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
属性将是未定义的。