为什么我的电脑显示我输入的键码是“W"在Javascript中为0



我正在构建一个JavaScript程序。虽然我尝试添加键事件,但当我完成并试图移动我的对象时,它没有移动。我试图找出问题是什么,而我试图移动一个对象(与x和y坐标系,例如(y[1] += 5;))。因此,我确实试图看到,所以键码是正确的。我创建了一个函数来查看keyCode:

window.addEventListener( "keypress", doKeyDown, false );   
 
function doKeyDown(e) {
    alert( e.keyCode )
}

然后我试着按下任何按钮来查看键码,但每个按钮都在说"0",除非箭头向上,向下,向右,向左。他们告诉我的值和这个网站上的一样http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes但是就像我说的"W"A"S"D"告诉我"0"

charCode代替keyCode

charCode属性保存字符的ascii码,您可以使用String.fromCharCode检索按下的字母。

键码和字符码是不同的东西,您可以使用这种差异来确定用户是否键入了字符或完成了操作,例如当使用箭头时。

使用window.addEventListener("keydown", doKeyDown, false);代替。它会报告你链接的页面上列出的键码。

'keydown'事件为任何按下的键报告一个键代码,并且不区分大小写。

  • 'e' = 69 and 'e' = 69
  • '[Num Lock]' = 144
  • '[Backspace]' = 8

'keypress'事件似乎只报告可打印字符(包括回车)的按键,并且按键代码也区分大小写。

  • 'e' = 101 and 'e' = 69
  • '[Num Lock]'没有值。
  • '[Backspace]'没有值。

这是一个JS Fiddle示例,显示了两个事件报告的值。

在Chrome中进行了测试

你应该(在一些样式的观点中)在你的事件监听器中使用你的函数之前声明它,尽管所有的浏览器都会提高它,但如果你使用jslint,它会给你错误。

'doKeyDown'在定义之前被使用。

以下是给出上述信息的众多答案之一:JSLint:在函数's定义错误之前使用函数

下面是一个例子,在jsfiddle

<input id="input" type="text"></input>
console.log("W", "W".charCodeAt());
function logIt(evt) {
    console.log(String.fromCharCode(evt.charCode), evt.charCode);
}
var input = document.getElementById("input");
input.addEventListener("keypress", logIt, false);

您可能还想阅读以下答案,还有其他答案,关于不同的事件类型keypesskeydown,以及属性charCodekeyCode:

JavaScript KeyCode vs CharCode

最新更新