javascript - 将 addeventlistener 添加到节点列表
问题描述
我正在尝试向eventListener
某些具有相同类的 div HTML 元素添加点击,但是在游戏初始化时我无法点击我的单元格。我对 JS 很陌生。有什么建议或提示可以为我指明正确的方向吗?吨
const cells = document.querySelectorAll(".cell");
let gameMark = function(cell) {
if (gameActive == true) {
let player = playerTurn();
let position = parseInt(cell.id[cell.id.length - 1]);
cell.innerText = player.symb;
boardArray.array[position] = player.symb;
gameWin();
gameTie();
}
};
cells.forEach(cell => cell.addEventListener('click', gameMark(cell)));
<strike>
<section id="board">
<div id="gameContainer">
<div id="row1">
<div id="cell_0" class="cell"></div>
<div id="cell_1" class="cell"></div>
<div id="cell_2" class="cell"></div>
</div>
<div id="row2">
<div id="cell_3" class="cell"></div>
<div id="cell_4" class="cell"></div>
<div id="cell_5" class="cell"></div>
</div>
<div id="row3">
<div id="cell_6" class="cell"></div>
<div id="cell_7" class="cell"></div>
<div id="cell_8" class="cell"></div>
</div>
</div>
</section>
</strike>
解决方案
addEventListener
期望一个函数作为它的第二个参数。您正在传递函数调用的结果。
// calling the function--+
// |
cells.forEach(cell => cell.addEventListener('click', gameMark(cell)));
您需要更改gameMark
以返回一个函数:
let gameMark = function(cell) {
return function () {
if (gameActive == true) {
let player = playerTurn();
let position = parseInt(cell.id[cell.id.length - 1]);
cell.innerText = player.symb;
boardArray.array[position] = player.symb;
gameWin();
gameTie();
}
}
};
或在循环中使用匿名函数:
cells.forEach(cell => cell.addEventListener('click', function () {
gameMark(cell);
});
推荐阅读
- javascript - NightwatchJS 无法使用 CSS 选择器定位元素
- python - 嵌套函数内的 cProfile
- ruby-on-rails - Friendly_ID 只返回一个对象,当许多对象匹配查找条件时
- python - 如何在 Rest Framwork 中将两个表的数据合并为 JSON?
- vba - Excel 查找多个文件并附加到电子邮件
- c++ - 来自简单循环的 OpenAcc 错误:内核执行期间的非法地址
- c# - LiteDB 集合返回但查询返回 null
- android - 错误:(26, 13) 无法解决:com.android.support:appcompat-v7:27.+
- javascript - 如何为 Mustache HTML 渲染格式化 Mustache 条件字符串?
- sql - SQL 附加来自两列和两个表的不同值