如何修复:TypeError: 'null'不是一个对象(计算'event.relatedTar

How to fix: TypeError: 'null' is not an object (evaluating 'event.relatedTarget.parentNode')

本文关键字:计算 relatedTar event 一个对象 null 何修复 TypeError      更新时间:2023-09-26

这是一个错误后,我上传了一个网站,我目前正在工作。

TypeError: 'null'不是一个对象(求值'event.relatedTarget.parentNode')

关于如何解决这个问题/我应该用什么来代替它,有什么想法吗?

在没有任何其他上下文的情况下,如果event.relatedTarget.parentNode给你这个错误,那么这意味着eventevent.relatedTarget是空的。

:

if (event && event.relatedTarget && event.relatedTarget.parentNode) {
    // your code here
}

现在你应该如何处理eventevent.relatedTarget为空的情况?我不知道,因为你没有提供足够的信息让别人知道你在做什么。

你可能需要做的是弄清楚为什么它有时(或可能一直)为空。

我遇到了同样的问题。我试着在https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Firstrongteps/A_firstrongplash上创建一个数字猜游戏。尽管我准确地输入了代码,但我一直得到TypeError: null不是至少两个代码的对象消息。当我认为它们被清除时,我会得到另一个TypeError: Number不是一个函数,并且在我的猜测答案中添加了末尾的零。我甚至会在字段输入焦点guessField.focus()上得到错误。但经过深入研究,我不仅发现这似乎是Safari浏览器的一个常见错误,而且我终于弄明白了。

我收到的所有错误消息都在函数checkGuess()中。尽管我在函数之前定义了变量,但它们并没有被定义或识别。最大的问题是围绕输入字段。最疯狂的是,当我第一次创建它时,它工作得很好,但在点击几下后,它就不工作了。

我所做的是为随机数重新定义变量,将其从全局移到词法环境中。它被更好地定义为与函数直接相关。游戏又开始运行了。这是原始代码:

<body>
    <div class="game">
        <h1>Number Guessing Game</h1>
        <p>
            We have selected a random number between 1 and 100. See if you can guess it in 10 turns or fewer. We'll tell you if your guess was too high or too low.
        </p>
        <label for="guessField">
            Enter a guess: </label>
        <input type="text" id="guessField" class="guessField" tabindex="1">
        <input type="submit" value="Submit Guess" class="guessSubmit" tabeindex="2" onclick="checkGuess()">
        <span class="resultParas">
            <p class="guesses"></p>
            <p class="lastResult"></p>
            <p class="lowOrHi"></p>
        </span> 
    </div>
</body>
<script>
var randomNumber = Math.floor(Math.random() * 100) + 1;
var guesses = document.querySelector('.guesses');
var lastResult = document.querySelector('.lastResult');
var lowOrHi = document.querySelector('.lowOrHi');
var guessSubmit = document.querySelector('.guessSubmit');
var guessField = document.querySelector('.guessField');
var guessCount = 1;
var resetButton;
guessField.focus();

function checkGuess() {
  var userGuess = randomNumber(guessField.value);
  if (guessCount === 1) {
    guesses.textContent = 'Previous guesses: ';
  }
  guesses.textContent += userGuess + ' ';
  if (userGuess === randomNumber) {
    lastResult.textContent = 'Congratulations! You got it right!';
    lastResult.style.backgroundColor = 'green';
    lowOrHi.textContent = '';
    setGameOver();
  } else if (guessCount === 10) {
    lastResult.textContent = '!!!GAME OVER!!!';
    setGameOver();
  } else {
    lastResult.textContent = 'Wrong!';
    lastResult.style.backgroundColor = 'red';
    if(userGuess < randomNumber) {
      lowOrHi.textContent = 'Last guess was too low!';
    } else if(userGuess > randomNumber) {
      lowOrHi.textContent = 'Last guess was too high!';
    }
  }
  guessCount++;
  guessField.value = '';
  guessField.focus();
  guessSubmit.addEventListener('click', checkGuess);
}
function setGameOver() {
  guessField.disabled = true;
  guessSubmit.disabled = true;
  resetButton = document.createElement('button');
  resetButton.textContent = 'Start new game';
  document.body.appendChild(resetButton);
  resetButton.addEventListener('click', resetGame);
}
function resetGame() {
  guessCount = 1;
  var resetParas = document.querySelectorAll('.resultParas p');
  for (var i = 0 ; i < resetParas.length ; i++) {
    resetParas[i].textContent = '';
  }
  resetButton.parentNode.removeChild(resetButton);
  guessField.disabled = false;
  guessSubmit.disabled = false;
  guessField.value = '';
  guessField.focus();
  lastResult.style.backgroundColor = 'white';
  randomNumber = Math.floor(Math.random() * 100) + 1;
}
</script>

我将checkGuest函数修改为:

var guesses = document.querySelector('.guesses');
var lastResult = document.querySelector('.lastResult');
var lowOrHi = document.querySelector('.lowOrHi');
var guessSubmit = document.querySelector('.guessSubmit');
var guessField = document.querySelector('.guessField');
var guessCount = 1;
var resetButton;
guessField.focus();

function checkGuess() {
    var userGuess = guessField.value;
    guessField.value = Number;
    Number = Math.floor(Math.random() * 100) + 1;
    if(guessCount === 1) {
    guesses.textContent = 'Previous guesses: ';
    }
    guesses.textContent += userGuess + '';
    if(userGuess === Number) {
        lastResult.textContent = 'Congratulations! You got it right!';
        lastResult.style.backgroundColor = 'green';
        lowOrHi.textContent = '';
        setGameOver();
    } else if(guessCount === 10) {
    lastResult.textContent = '!!!Game Over!!!';
    setGameOver();  
    } else {
        lastResult.textContent = 'Wrong!';
        lastResult.style.backgroundColor = 'red';
        if(userGuess < Number) {
            lowOrHi.textContent = 'Last guess was too low!';
        } else if(userGuess > Number) {
            lowOrHi.textContent = 'Last guess was too high!';
        }
    }
    guessCount++;
    guessField.value = '';
    guessField.focus();
guessSubmit.addEventListener('click', checkGuess);
}