keycode和charcode

时间:2009-09-18 13:12:48

标签: javascript jquery

为什么人们会写出像

这样的陈述
e.keyCode ? e.keyCode : e.charCode

有些人还使用e.which

有人可以解释一下吗?

6 个答案:

答案 0 :(得分:97)

始终如一地处理关键事件并非易事。

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

其次,您在keypress事件中获得的值与keyupkeydown事件中获得的值不同。

我建议将this page作为有用的资源。总结:

如果您对检测用户输入字符感兴趣,请使用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");
  }
}

答案 1 :(得分:9)

这是条件陈述。

如果浏览器支持e.keyCode,则接受e.keyCode else e.charCode。

类似于

var code = event.keyCode || event.charCode

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

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

答案 2 :(得分:4)

keyCode,表示以数值形式按下的实际键盘键。存在的原因是keyCode在Internet Explorer中可用,而在FireFox等W3C浏览器中可用。

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

JavaScript表达式:

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

基本上说以下内容:

如果e.keyCode属性存在,请将变量keyCode设置为其值。否则,将变量keyCode设置为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;

编辑:根据Tor Haugen的评论更正了我对charCode的解释。

答案 3 :(得分:4)

好的,这是解释。

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>

Getting keyCode and charCode in JavaScript的实例。

答案 4 :(得分:0)

我(作为自己的人)写了这句话,因为我想检测用户在不同浏览器上键入的键。

在Firefox中,例如,字符有&gt; 0 charCode和0 keyCode,以及箭头和&amp;等键。 backspace有&gt; 0 keyCode和0 charCode。

但是,使用此语句可能会出现问题,因为“碰撞”是可能的。 例如,如果要区分Delete和Period键,则不起作用,因为Delete具有keyCode = 46且Period具有charCode = 46。

答案 5 :(得分:-2)

使用jQuery时添加属性event.which以避免浏览器差异。 See docs

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