【发布时间】:2017-02-20 17:59:26
【问题描述】:
可能是一个简单的修复,但我已经坚持了几天。我正在构建一个井字游戏项目,我想在我的 user 对象中构建一个名为 userClick() 的方法,该方法满足以下条件:
- 当用户点击一个tictactoe tile时:
- 将该磁贴 (
div) 内的 HTML 文本更改为用户的marker(X 或 O); - 将
taken的CSS 类添加到磁贴; - 将用户的得分/移动计数增加 1。
以下是我尝试摆弄的相关 Javascript/jQuery 代码: 变种用户 = { 得分:0, 标记:“X”,
userClick: function() {
$('.box').onClick(function() {
this.text(marker);
this.addClass('taken');
score += 1;
});
};
我的 HTML 有 9 个 div 排列在一个 tictactoe 网格中,所有 div 的类都是 box。我的 CSS 文件还有一个 taken 类,它在单击时更改 div 的背景颜色。但是,当我单击任何 div 时,什么也没有发生。我已经尝试对该功能进行多次调整以使其正常工作,但没有运气。我对闭包、事件处理程序和this 绑定仍然相当缺乏经验,所以也许有更多经验的人可以为我解释一下。
谢谢!
编辑:这是到目前为止整个代码库的JSFiddle,以防万一。 (有问题的方法从第 74 行开始)。
【问题讨论】:
-
那是 jQuery 吗?
.onClick应该是.on('click', function() {或.click(function() {和$(this)内部处理程序以在单击的元素上使用 jQuery 方法。 -
this是你使用的元素$(this) -
当您使用
.click(...)或.on('click', ...)时,jQuery 会为您将作用域绑定到当前元素。您自己的.onClick()函数不会这样做,因此您需要将其显式绑定到您需要的范围。您可以为此使用.bind,或使用call()或apply()调用它(这是JS 原生函数,而不是jQ)
标签: javascript jquery closures this jquery-events