首页 > 解决方案 > 控制台中的错误:未捕获的 TypeError:无法读取 null 的属性“getAttribute”

问题描述

我的控制台出现错误

未捕获的类型错误:无法在 HTMLButtonElement.onclick (index.html:56) 的 Object.game.new (start.js:17) 的 Object.game.map.genererateBlocked (main.js:57) 读取属性“getAttribute”

我不知道是什么导致了这个错误。

// 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
    };
  }
}

// 开始.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>

标签: javascriptjquery

解决方案


很好,我找到了答案,这是要生成的数字设置为 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--; 
    };
  }
}

推荐阅读