【发布时间】:2017-03-01 15:06:24
【问题描述】:
提前感谢您的帮助!
我正在创建一个简单的井字游戏来帮助我学习原生 JavaScript,所以我的目标是在没有 jQuery 或 HTML/CSS 的情况下尽可能多地完成游戏。
我正在使用 for-loop 创建多个 div 元素,遵循 JSLint。我在创建div 元素的过程中附加了一个.addEventListener(),以在单击时更改特定 div 的背景颜色。
我一直在搜索 StackOverflow,试图使用 this 来引用特定的 div 点击。到目前为止,我成功的唯一方法是在我的for-loop 中使用匿名函数within。 JSLint 没有留下深刻印象,我明白了:
不要在循环中创建函数。
当我尝试调用外部函数并传入this 时,整个div 创建过程停止工作,我不知道为什么。
我所拥有的(“有效”):https://jsfiddle.net/typj2LLb/4/
// create game
var gameContainer = document.getElementById('board');
var createBoard = function() {
'use strict';
var index, square;
for (index = 0; index < 9; index += 1) {
square = document.createElement('div');
square.className = 'tile';
// tile event
square.addEventListener('click', function() {
this.style.backgroundColor = 'yellow';
});
gameContainer.appendChild(square);
}
};
createBoard();
.tile {
display: inline-block;
height: 25vh;
width: 30%;
margin: 0 3px;
border: 1px solid black;
}
<body>
<div id="board"></div>
</body>
我认为我应该做的事情(那行不通):https://jsfiddle.net/e4mstyy9/1/
// click-event
function changeColor(specificElement) {
'use strict';
specificElement.style.backgroundColor = 'yellow';
}
// create game
var gameContainer = document.getElementById('board');
var createBoard = function() {
'use strict';
var index, square;
for (index = 0; index < 9; index += 1) {
square = document.createElement('div');
square.className = 'tile';
// tile event
square.addEventListener('click', changeColor(this));
gameContainer.appendChild(square);
}
};
createBoard();
.tile {
display: inline-block;
height: 25vh;
width: 30%;
margin: 0 3px;
border: 1px solid black;
}
<body>
<div id="board"></div>
</body>
【问题讨论】:
-
始终在评论中包含相关代码或您的代码。您甚至可以使用 stack sn-ps 而不是 jsfiddle 来创建内联可运行示例。
-
啊,谢谢菲利克斯。我会确保在未来这样做。
标签: javascript for-loop this addeventlistener jslint