所以,我正在构建一个网站,您可以将其作为代码示例播放othello。我有一个多维数组作为幕后游戏板,然后遍历表中的每个'td'以匹配相应数组成员的值。我遇到的问题是迭代表。并使用迭代器作为我的数组的基本坐标是行不通的。随着迭代器值的增加,我每个'td'中的坐标也越来越多。我很难过,并冒烟。任何帮助将不胜感激。
function gridArray() {
// creates game board's array.
for (var i = 0; i < gameArray.length; i++) {
gameArray[i] = new Array(8);
}
for (var row = 0; row < gameArray.length; row++) {
for (var col = 0; col < gameArray[row].length; col++) {
gameArray[row][col] = "green";
}
}
}
function drawGrid(){
// writes table to HTML document
var htmlString = "<table id='othelloGrid'><tr>";
for (var i = 0; i < 8; i++) {
htmlString += "<th>" + i + "</th>";
}
htmlString += "</tr>";
for (var j = 0; j < 8; j++) {
htmlString += "<tr>";
xPos = j;
for (var x = 0; x < 8; x++) {
yPos = x;
// HERE!!! I now realize javascript passes by reference, so as this loop iterates,
// every single 'td' is getting 'onclick = 'changeClass(7, 7)''.
// for my game grid to work, I need each td to have a unique xPos, yPos to
// connect back to gameArray.
htmlString += "<td onclick = 'changeClass(xPos, yPos)'></td>";
}
htmlString += "</tr>";
}
htmlString += "</table>";
return htmlString;
}
答案 0 :(得分:3)
变量不会在字符串内扩展。所以你的所有TD都有文字属性onclick='changeClass(xPos, yPos)'
,而不是循环中这些变量的值。因此,当您实际点击它们时,它们都会使用这些变量的最新值。
您需要使用字符串连接来获取值。并且不需要全局变量xPos
和yPos
,您可以使用本地j
和x
变量。
htmlString += "<td onclick = 'changeClass(" + j + ", " + x + ")'></td>";