2017-04-21 64 views
2

我正在尝试构建一个岩石,纸,剪刀游戏。这里是我的代码:介绍Javascript - 函数,语法,逻辑

var options = ["r", "p", "s"]; 
 
    
 
document.onkeyup = function() { 
 
    var userGuess = String.fromCharCode(event.keycode).toLowerCase(); 
 

 
    console.log(userGuess); 
 

 
    var computerGuess = options[Math.floor(Math.random() * options.length)]; 
 

 
    console.log(computerGuess); 
 

 
    if (userGuess == "r" || userGuess == "p" || userGuess == "s") { 
 
     alert("Chosen Correctly - Good job!"); 
 
    } else { 
 
     alert("Please choose r, p, or s"); 
 
    } 
 
}

当我按R,P,或者我的警报不说 “!正确选择 - 干得好”;相反,警报请选择“r”,“p”或“s”。 HHHmmmm,没有这个工作,我不能开始比较用户的猜测和电脑的猜测。任何新鲜的眼睛能帮助我吗?谢谢,麻烦您了。

+3

@Sam:他将一个字符串与一个字符串进行比较,所以严格平等不会改变结果。 – 2017-04-21 18:14:50

+0

@squint真的很感谢您指出它。但有时候生活并不稀罕。无论如何,如果他严格平等,那就更为正确。错误是“C”人评论。 – Sam

+0

Robert:欢迎来到SO!我将你写得很好的代码示例转换为“snippit”,以便我们可以直接在问题中运行它并将其复制到答案中。你可以在将来的问题中使用它。 (它可以在按钮栏中找到) – msanford

回答

1

两个变化:

  1. 通行证在event所以它的。局部可用
  2. keyCode是写在intercaps,(不keycode,因为你拥有它); JavaScript是大小写敏感的

调试好尖。是console.dir()您试图检查的对象,这将显示正确(和可用)的属性和方法名称。

(但是,请注意,event是巨大的,所以你将有很多筛选。)

var options = ["r", "p", "s"]; 
 
    
 
document.onkeyup = function(event) { 
 

 
    var userGuess = String.fromCharCode(event.keyCode).toLowerCase(); 
 

 
    console.log(userGuess); 
 

 
    var computerGuess = options[Math.floor(Math.random() * options.length)]; 
 

 
    console.log(computerGuess); 
 

 
    if (userGuess == "r" || userGuess == "p" || userGuess == "s") { 
 
     alert("Chosen Correctly - Good job!"); 
 
    } else { 
 
     alert("Please choose r, p, or s"); 
 
    } 
 
}

1

您错过了keyCode上的空间C.

var userGuess = String.fromCharCode(event.keyCode).toLowerCase();

+0

谢谢!我知道这是与错字或语法有关的东西。 –

1

event.keycodeevent.keyCode,注意资本C.此外,它很可能是最好只用event.key,因为这已经是一个字符串。

你在开发什么浏览器?开发人员工具可以在大多数情况下通过按F12访问,您可以在程序运行时将断点放入变量中。

+0

谢谢!我正在使用Chrome浏览器 - 检查控制台;然而,我从来没有注意到被引用的错误。 –

+0

我想我会谷歌断点 - 谢谢! –

+0

如果您使用的是Chrome,请按F12,转到源代码,找到具有JS的文件,然后单击左侧的数字以放置断点。仅供参考,我就是这么想的。我把一个断点,看到'event.keycode'是未定义的。但我注意到'event.keyCode' *被定义。另外,别人已经说过了,但是你可能想添加事件作为参数给函数:'document.onkeyup = function(event){'因为有些浏览器可能在那里没有工作。 – conman124

1

正如其他人所说,你错过了keyCode的首都“C”。

但是在我看来,您并未在任何地方定义event。使用全球event对象是一个坏主意,并且(幸好)不被所有浏览器支持。您也可能想要使用event.which而不是event.keyCode,该功能对所有事件都不一致。

事件处理程序的开始应该看起来更像是这样的:

document.onkeyup = function(event) { 
    var userGuess = String.fromCharCode(event.which).toLowerCase(); 
    ... 

但你也可以使用控制台日志记录,看看发生了什么事情,就像这样:

document.onkeyup = function(event) { 
    console.log("event=", event); 
    var userGuess = String.fromCharCode(event.which).toLowerCase(); 

请注意,我没有't say console.log("event=" + event);

+将导致事件输出为类似[object Object];用逗号(和任何现代浏览器的开发者控制台,通常与F12访问,你就可以浏览对象的内容

+0

他正在使用全局'event',尽管它在Firefox中不可用。 – 2017-04-21 18:17:20

+0

这也让我困惑,我不知道事件会自动添加。 – conman124

+0

是的,这不是一个很好的做法... – Lambart

0

你会希望有event作为paramater给事件处理程序和它的event.keyCode而非event.keycode(W HICH将不确定):

var options = ["r", "p", "s"]; 
 
    
 
document.onkeyup = function(event) { 
 
    var userGuess = String.fromCharCode(event.keyCode).toLowerCase(); 
 

 
    console.log(userGuess); 
 

 
    var computerGuess = options[Math.floor(Math.random() * options.length)]; 
 

 
    console.log(computerGuess); 
 

 
    if (userGuess == "r" || userGuess == "p" || userGuess == "s") { 
 
     alert("Chosen Correctly - Good job!"); 
 
    } else { 
 
     alert("Please choose r, p, or s"); 
 
    } 
 
}

0

只需更改event.keycode TO event.keyCode