javascript - 控制台中的错误:未捕获的 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>
解决方案
很好,我找到了答案,这是要生成的数字设置为 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--;
};
}
}
推荐阅读
- angular - Google 登录与 Angular 2 移动应用程序的集成
- javascript - 是否需要在节点中使用 eval 来运行另一个文件中的代码
- javascript - 在复选框中获取选中的值并放入列表
- vue.js - 图标在表格列内停止工作
- laravel - Laravel centos vs ubuntu 性能
- php - 在laravel 5.6中单击导航栏时如何使其处于活动状态?
- reactjs - 反应重新渲染组件但不是整个页面问题
- php - 如何访问外部核心 php 文件中的 codeigniter 会话值
- android - JSONArray 无法解析
- c++ - 如何在c ++中旋转向量中的每个第N个元素