控制台中的错误:未捕获的TypeError:无法读取null的属性'getAttribute'

时间:2019-08-21 11:13:23

标签: javascript jquery

我的控制台出现错误

  

未捕获的TypeError:无法在读取null的属性'getAttribute'   Object.game.new的Object.game.map.genererateBlocked(main.js:57)   (start.js:17),位于HTMLButtonElement.onclick(index.html:56)

我不知道是什么原因导致此错误。

// main.js

//****************************** Initialise les obstacles ******************************//


game.map.genererateBlocked = function (nb) {

  for (var i = 0; i < nb; i++) {
    var x = Math.ceil(Math.random() * 10); //genere un nombre entre 1 et 10
    var y = Math.ceil(Math.random() * 10);

    var blocked = document.querySelector(".square[data-x='" + x + "'][data-y='" + y + "']"); // on recupere la case

    if (blocked.getAttribute("type") === "") { // test si la case est vide
      blocked.setAttribute("type", "blocked"); // on defini le type a blocked
      blocked.classList.add("blocked"); // on attribue la classe blocked
    } else {
      i--; // si la case n'est pas vide on recommence l'iteration
    };
  }
}

// start.js

game.map.generateMap(); // on genere la carte
game.map.genererateBlocked(nbBlocked); // on genere les obstacles
game.map.generateWeapons(nbWeapon); // on genere les armes
game.players.generatePlayers(); // on genere les joueurs

// index.html

<button onclick="game.new();" id="newgame">Nouvelle Partie</button>

2 个答案:

答案 0 :(得分:0)

很好,我找到了答案,这是要设置为7的要生成的数字

game.map.genererateBlocked = function (nb) {

  for (var i = 0; i < nb; i++) {
    var x = Math.ceil(Math.random() * 7); 
    var y = Math.ceil(Math.random() * 7);

    var blocked = document.querySelector(".square[data-x='" + x + "'][data-y='" + y + "']"); // on recupere la case

    if (blocked.getAttribute("type") === "") { 
      blocked.setAttribute("type", "blocked"); 
      blocked.classList.add("blocked"); 
    } else {
      i--; 
    };
  }
}

答案 1 :(得分:-1)

添加检查以确保确实找到了该块。修改行:

if (blocked.getAttribute("type") === "") { // test si la case est vide

收件人:

if (blocked && blocked.getAttribute("type") === "") { // test si la case est vide