键码和字符码

IT技术 javascript jquery
2021-01-22 12:44:48

为什么人们写这样的陈述

e.keyCode ? e.keyCode : e.charCode

有些人还用 e.which

有人可以解释一下吗?

6个回答

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

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

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

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

如果您有兴趣检测用户键入的字符,请使用该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");
  }
}
@bhavya_w:支持旧版本的 Internet Explorer(版本 8 及更早版本),其中存储字符代码keyCode且不支持该which属性。有关详细信息,请参阅unixpapa.com/js/key.html
2021-03-27 12:44:48
先生...为什么我们使用或....evt.which || evt.keyCode...为什么不仅是 e.which...当本质上 e.which 返回按下的键的 keyCode 或按下的字母数字键的字符代码时。
2021-04-10 12:44:48

它是一个条件语句。

如果浏览器支持 e.keyCode,则采用 e.keyCode 否则采用 e.charCode。

它类似于

var code = event.keyCode || event.charCode

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

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

这可以写成一个单行:var keyCode = event.keyCode || event.charCode.
2021-04-12 12:44:48

好的,以上是解释。

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 的实时示例

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 的解释。

e.charCode不是文本。它返回字符的(数字)unicode 值。它与 keyCode 的不同之处在于,例如,它对 A 和 a 具有不同的值(即是否按住 shift 键)。
2021-04-12 12:44:48

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

例如在 firefox 中,字符 > 0 charCode 和 0 keyCode,箭头和退格键等键 > 0 keyCode 和 0 charCode。

但是,使用此语句可能会出现问题,因为“冲突”是可能的。例如,如果您想区分 Delete 和 Period 键,这将不起作用,因为 Delete 的 keyCode = 46 而 Period 的 charCode = 46。