为什么人们写这样的陈述
e.keyCode ? e.keyCode : e.charCode
有些人还用 e.which
有人可以解释一下吗?
为什么人们写这样的陈述
e.keyCode ? e.keyCode : e.charCode
有些人还用 e.which
有人可以解释一下吗?
始终如一地处理关键事件并不容易。
首先,有两种不同类型的代码:键盘代码(代表用户按下键盘上的键的数字)和字符代码(代表 Unicode 字符的数字)。您只能在keypress
事件中可靠地获取字符代码。不要试图获取keyup
和keydown
事件的字符代码。
其次,您在keypress
事件中获得的值集与在keyup
或keydown
事件中获得的值不同。
我推荐这个页面作为一个有用的资源。作为总结:
如果您有兴趣检测用户键入的字符,请使用该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 值。
event.charCode:返回按键事件期间按下的字符键的 Unicode 值。
好的,以上是解释。
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>
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 的解释。
我(我自己就是人)写了这个声明是因为我想检测用户在不同浏览器的键盘上输入的键。
例如在 firefox 中,字符 > 0 charCode 和 0 keyCode,箭头和退格键等键 > 0 keyCode 和 0 charCode。
但是,使用此语句可能会出现问题,因为“冲突”是可能的。例如,如果您想区分 Delete 和 Period 键,这将不起作用,因为 Delete 的 keyCode = 46 而 Period 的 charCode = 46。