我正在创建一个乒乓球游戏,并且正在实现桨的移动功能。但是,当我尝试获取keyCode来查看它们是否试图向上或向下移动时,会出现此错误。
我试图在console.log上几乎所有内容以帮助找出问题所在,并查找了如何在线进行操作,但没有任何帮助。
//javascript to get keyCode for wasd paddle
function getWasdKey(e){
var key = e.keyCode;
if(key == 87){
return true;
}
if(key == 83){
return false;
}
}
//javascript to get keyCode for arrow paddle
function getArrowKey(e){
var key = e.keyCode;
if(key == 38){
return true;
}
if(key == 40){
return false;
}
}
//where I use the get key functions
function paddleArrowMove(){
var paddlearrowtop = getStyle('paddlearrow', 'top');
if(getArrowKey == true){//up
setStyle('paddlearrow', 'top', paddlearrowtop - 5);
}
if(getArrowKey == false){//down
setStyle('paddlearrow', 'top', paddlearrowtop + 5);
}
}
function paddleWasdMove(){
var paddlewasdtop = getStyle('paddlewasd', 'top');
if(getWasdKey == true){//up
setStyle('paddlewasdtop', 'top', paddlewasdtop - 5);
}
if(getWasdKey == false){//down
setStyle('paddlewasdtop', 'top', paddlewasdtop + 5);
}
}
//html to run the javascript
<body onload="startIntervals();" onkeypress="getArrowKey(); getWasdKey();">
我希望拨片会上下移动,但是出现“无法读取未定义的'keyCode'属性'”错误。
答案 0 :(得分:3)
您的函数getArrowKey
和getWasdKey
带有参数e
,您显然希望将其用作相应事件的事件对象。但是,您不带参数调用它们:
onkeypress="getArrowKey(); getWasdKey();"
当您使用Javascript调用一个函数而未能传递其所有形式参数时,假定您不提供的任何内容都是undefined
。这就是e
在这里的情况,并引起您的错误。
因为使用on*
属性通常是个坏主意,所以我建议通过使用Javascript添加事件侦听器来解决此问题。除其他好处(如将内容和逻辑之间的关注点分离)外,传递给addEventListener
的函数在调用时会自动随事件对象作为其参数提供。
所以删除此:
onkeypress="getArrowKey(); getWasdKey();"
从body
元素中添加,然后将其添加到您的Javascript中:
document.body.addEventListener("keypress", function(e) {
getArrowKey(e);
getWasdKey(e);
});
此外,正如@connexo正确指出的那样,您的startIntervals
函数是完全不必要的,并且可能会导致错误-所以我也将其删除。