javascript - 单击后尝试更改单元格图像,单击后不会更改
问题描述
一旦我单击它,我就会尝试更改单元格上的 img,但是这不会发生,解释和解决方案会很好。
我手动将gBoard[0][0].isFlagged设置为true,然后点击单元格,img没有变化。
html
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="ie=edge" http-equiv="X-UA-Compatible">
<title>Document</title>
<link href="css/game.css" rel="stylesheet">
</head>
<body onload="init()">
<h1>Welcome to minesweeper</h1>
<div class="board-container"></div><button class="restart-Btn" onclick="restartGame(this)">restartGame</button>
<script src="js/utils.js">
</script>
<script src="js/game.js">
</script>
</body>
</html>
脚本
const TILE = '<img src="/img/tile.png" >'
const TWO = '<img src="/img/2.png" >'
function printMat(mat, selector) {
var strHTML = '<table border="1"><tbody>';
for (var i = 0; i < mat.length; i++) {
strHTML += '<tr>';
for (var j = 0; j < mat[0].length; j++) {
var className = `cell-${i}-${j}`
strHTML +=
`<td class="${className}"
onclick="cellClicked(this, ${i}, ${j})">
<img src="${mat[i][j].image}" >
</td>`
}
strHTML += '</tr>'
}
strHTML += '</tbody></table>';
var elContainer = document.querySelector(selector);
elContainer.innerHTML = strHTML;
}
function createBoard(size) {
var board = []
for (var i = 0; i < size; i++) {
board[i] = []
for (var j = 0; j < size; j++) {
board[i][j] = creatCell()
}
}
return board
}
function creatCell() {
return {
isBomb: false,
isFlagged: false,
isClicked: false,
isOpen: false,
image: "/img/tile.png"
}
}
function cellClicked(elCell, i, j) {
if (gBoard[i][j].image === TILE && gBoard[i][j].isFlagged === true) {
elCell.innerHTML = TWO
}
}
解决方案
如果你检查cellClicked()
函数,第一次比较是不对的。TILE
包含一个包含整个<img>
元素的字符串,但gBoard[i][j].image
只是src
属性的值,所以这个比较:
gBoard[i][j].image === TILE
真的在比较:
'<img src="/img/tile.png" >' === '/img/tile.png'
这永远不会是真的。
我通过设置一个新变量让它工作tileSrc
:
const TILE = '<img src="/img/tile.png" >'
const tileSrc = '/img/tile.png';
然后在条件 in 中cellClicked()
,对此进行测试:
if (gBoard[i][j].image === tileSrc && gBoard[i][j].isFlagged === true)
你可以在这里看到它的工作原理:Tiles App
推荐阅读
- python - 如何在 matplotlib 中为多个图设置规范?
- graphics - GLSL(vulkan 方言)模运算符导致奇怪的行为
- google-cloud-platform - 我们不鼓励在 Google Kubernetes Engine (GKE) 中进行基本身份验证
- salesforce-lightning - 如何从js获取账户ID?lwc
- python - 在 VS Code 中以交互方式使用 Python(*.py 文件)时是否可以显示/探索变量值?
- docker - php:7.4-apache docker 上的 CVE-2021-26691
- mysql - Angular11 - Spring Boot - MySQL:POST请求未成功创建数据库条目
- javascript - 当通过 history.push() 传递时,为什么状态会在我的应用程序中丢失?
- javascript - 不确定为什么我的功能部分工作 - 单击 div 旋转图标
- dart - 在索引 0 处插入新对以进行映射。(飞镖)