JavaScript 在一个简单的猜谜游戏的函数上返回 null

标签 javascript function null typeerror

我使用 JavaScript 创建了一个猜谜游戏。最初,我在 codepen 中编写了它,它运行良好,当我将它移至 sublime 以在浏览器中独立测试它时,代码不起作用。我收到此错误:“Uncaught TypeError:无法在猜测时读取 null 的属性‘值’”,即第 14 行 varguessValue = parseInt(guessIn.value);并链接回第 20 行的 HTML,即 Guess

我不知道 null 是从哪里来的。我做错了什么或没有正确定义导致空值?我删除了 CSS 以将其清空,并确保这不会搞砸任何事情。

//Generate random number between 1 and 500

var randomNumber = Math.floor((Math.random() * 500) + 1);

//Create variables to store info for loops and displaying info back to user
var guessIn = document.getElementById('userGuess');
var guessOut = document.getElementById('guessesMade');
var counter = 0;

//function runs when the guess button is hit

function guess() {
  //declare temp local var and store as an integer for conditional testing
  var guessValue = parseInt(guessIn.value);
  
  //if statement for finding the value and reporting to the user
  //check if the counter is less than 10 and guessValue is not empty
    if (counter < 10 && guessValue) {
      counter++;
    }  
  //the guess is correct
    if (guessValue == randomNumber) {
      guessOut.value = guessOut.value + '\n' + "Guess " + counter + " is " + guessIn.value + ':' + ' You have correctly guessed the number. You may escape.';
    }
  // the guess is greater
    if (guessValue > randomNumber) {
      guessOut.value = guessOut.value + '\n' +"Guess " + counter + " is " + guessIn.value + ':' + ' Your guess is incorrect. The number I am thinking of is lower.';
    }
  //the guess is lower
    if (guessValue < randomNumber) {
      guessOut.value = guessOut.value + '\n' + "Guess " + counter + " is " + guessIn.value + ':' + ' Your guess is incorrect. The number I am thinking of is higher.';
    }
  //when all 10 guesses are used
  else if (counter == 10) {
    guessOut.value = guessOut.value + '\n' + "You did not guess the number I was thinking, " + randomNumber + "." + " You have met your end. Goodbye.";
  }
  return false;
}

//Show the number to guess upon clicking the checkbox for Cheat
function cheat() {
  if (document.getElementById('cheat').checked) {  document.getElementById('cheatNumber').value = randomNumber;
    document.getElementById('cheatShow').style.display = 'inline';
  }
  else {  document.getElementById('cheatNumber').value = '';
 document.getElementById('cheatShow').style.display = 'none';
  }
}

//function to reset the game
function reset() {
  //reset guess value
  userGuess.value = "";
 //reset text area 
  guessesMade.value = "";
  //reset counter
  counter = 0;
  //set new random number for play
  randomNumber = Math.floor((Math.random() * 500) + 1);
  return false;
}
<html>
<head>
<title>Do You Wanna Play A Game?</title>

<script src="game.js"></script>
</head>

<body>
<h1>Do You Wanna Play A Game?</h1>
<h3>A Guessing Game</h3>

<fieldset>
	<legend>The Game Starts Now</legend>
	<p>Welcome. You have stumbled upon this page. As a consequence, you have been trapped. To get out, the objective is simple.</p>
  <p>I am thinking of a number. This number is between 1 and 500. You get ten guesses.</p>
	<p>Good luck.</p>

  <div id="guessingarea">
	<input type="text" id="userGuess" value="394" /><br />
  <button onClick="guess();">Guess</button>
  <button onClick="reset();">Reset</button>
    <br />
  <input id="cheat" type="checkbox" value="cheat" onClick="cheat();" />
  <label for="cheat">Cheat</label>
  <div id="cheatShow" style="display: none;">
  <input id="cheatNumber" type="text"/>
  </div>
  </div>
</fieldset>
<p></p>
  <fieldset>
    <legend>Let's examine your guess, shall we?</legend>
    <textarea id="guessesMade"  rows="14" style="width: 100%;"></textarea>
  </fieldset>
</body>
</html>

最佳答案

看起来您在 html 文档之前包含了脚本。

document.getElementById('userGuess');

在元素“userGuess”存在之前调用。

我可以想到两种解决方案,要么在文档末尾包含脚本,要么仅在需要时访问此元素,而不是像这样在开头声明它:

var guessValue = parseInt(document.getElementById('userGuess').value);

关于JavaScript 在一个简单的猜谜游戏的函数上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40195492/

相关文章:

javascript - 无法使用 jquery 或 javascript 获取签名字段文本或值

javascript - 我如何在 jQuery 的函数之外调用 clearInterval?在 setInterval 之外

javascript - 如何让我的重置功能在我的输入元素上工作?

javascript - 从嵌套在函数中的函数返回数组并处理 promise 检查

javascript - 如何在表的列中嵌入树结构

javascript - 修改Superfish菜单jQuery插件

c# - 为什么一个null返回可以被测试而另一个会抛出异常?

r - 从 R 中具有某些 NULL 值的对象创建数据框

c# - 是否有方便的语法来检查可以为 null 的嵌套属性?

javascript - 在构造函数 javascript 中将属性设置为函数