【问题标题】:Introduction Javascript - functions, syntax, logic介绍 Javascript - 函数、语法、逻辑
【发布时间】:2017-04-21 18:09:31
【问题描述】:

我正在尝试构建一个石头剪刀布游戏。这是我的代码:

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 或 s 时,我的警报没有显示“正确选择 - 干得好!”;相反,警报是请选择“r”、“p”或“s”。 HHHmmmm,如果没有这个工作,我无法开始将用户猜测与计算机猜测进行比较。任何新鲜的眼睛会帮助我吗?请和谢谢。

【问题讨论】:

  • @Sam:他在比较一个字符串和一个字符串,所以严格相等不会改变结果。
  • @msanford:你听起来好像这个问题被严重否决了。一位用户给了它-1。谁在乎?如果有的话,它温和鼓励人们在询问之前进行更彻底的调试。
  • @msanford 谢谢!那么在提问页面中,我如何运行 sn-p 而不仅仅是一段代码?
  • 你是对的。我只是不想让社区认为我很懒惰。相反,我不太愿意寻求帮助。我只有在完全被难住的时候才来这里,在谷歌搜索、谷歌搜索和谷歌搜索之后。再次感谢大家的快速帮助。
  • @msanford 你在这里所说的很重要。我在这个社区中相对较新,我可以说有时你会感觉到人们的自我意识,他们会在简单的问题甚至我们都犯的常见错误时回过头来。几乎接近侮辱用户的人甚至在数英里之外看到用户的意图正在学习。我总是说我是来学习的。此外,如果我尝试解决用户问题,则有意为自己澄清概念并进行改进。我喜欢从这里读到资深人士的谈话。

标签: javascript function syntax


【解决方案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");
    }
}

【讨论】:

    【解决方案2】:

    您在 keyCode 上缺少一个大写的 C。

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

    【讨论】:

      【解决方案3】:

      event.keycode 应该是 event.keyCode,注意大写 C。另外,最好只使用 event.key,因为这已经是一个字符串。

      你在开发什么浏览器?大多数开发者工具都可以通过按 F12 来访问,您可以在程序运行时设置断点来访问变量。

      【讨论】:

      • 谢谢!我正在使用 Chrome - 检查控制台;但是,我从未注意到该错误被引用。
      • 如果你使用的是 Chrome,按 F12,转到源代码,找到有你 JS 的文件,然后单击左侧的数字放置断点。仅供参考,这就是我想出来的。我放了一个断点,发现event.keycode 是未定义的。但我注意到 event.keyCode 已定义。另外,其他人已经说过了,但您可能希望将事件作为参数添加到函数中:document.onkeyup=function(event){,因为如果没有它,某些浏览器可能无法工作。
      【解决方案4】:

      正如其他人所说,您错过了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();
      

      注意我没有说console.log("event=" + event);

      + 会导致事件以[object Object] 之类的形式输出;使用逗号(以及任何现代浏览器的开发人员控制台,通常可以使用 F12 访问),您将能够浏览对象的内容。

      【讨论】:

      • 他使用的是全局event,虽然在 Firefox 中不可用。
      • 这也让我很困惑,我不知道该事件会自动添加。
      • 感谢 event.which 更新,因为我宁愿编写可以在任何地方工作的程序!谢谢,伙计。
      • 当然。附:仅供参考,IE 不支持 console 对象(上次我检查过),不要把它放在生产代码中(至少不是没有某种hackery)。 :)
      【解决方案5】:

      您会希望将event 作为事件处理程序的参数,它是event.keyCode 而不是event.keycode(w未定义):

      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");
          }
      }

      【讨论】:

        【解决方案6】:

        只需将event.keycode 更改为event.keyCode

        【讨论】:

          猜你喜欢
          • 2014-03-12
          • 1970-01-01
          • 1970-01-01
          • 2012-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-29
          • 1970-01-01
          相关资源
          最近更新 更多