Javascript 事件处理程序 `this` 闭包内的绑定(bind)不起作用

标签 javascript jquery closures this jquery-events

可能是一个简单的修复,但我已经坚持了几天了。我正在构建一个 tic-tac-toe 项目,我想在我的 user 对象中构建一个名为 userClick() 的方法,该方法满足以下条件:

  • 当用户点击井字棋图 block 时:
  • 将该图 block (div) 内的 HTML 文本更改为用户的标记(X 或 O);
  • 将 CSS 类 taken 添加到图 block ;
  • 将用户的得分/移动计数增加 1。

这是我尝试摆弄的相关 Javascript/jQuery 代码: var 用户 = { 得分: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 绑定(bind)仍然相当缺乏经验,因此也许有更多经验的人可以为我阐明这一点。

谢谢!

编辑:这是一个 JSFiddle到目前为止的整个代码库,以防有帮助。 (有问题的方法从第 74 行开始)。

最佳答案

我(更不用说解析器)并不完全清楚您期望“this”在您的上下文中是什么。是你想要的jquery选择元素吗?或者是用户对象?

鉴于您正在尝试向其中添加 CSS 类,我假设您想要单击的元素。您的处理程序分配应如下所示:

$('.box').on('click', function() {
    var box = $(this); // refers to the clicked element
    box.text(marker);
    box.addClass('taken');
    score += 1;
  });

关于Javascript 事件处理程序 `this` 闭包内的绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990031/

相关文章:

javascript - Angular2 Router3通配符和前缀匹配的区别

javascript - 绘制谷歌地图形状标记对象

javascript - JQUERY : Confusion to find next element in a complex structure

javascript - 如何使用 jQuery 或其他 js 框架将字符串上传为文件

jquery - iPad/iPhone双击问题

javascript - 是否可以将 .val 与类一起使用?

javascript - jQuery:我怎样才能绕过使用 if 语句来摆脱 "undefined"错误

Ruby 相当于 python 非本地

javascript - 在函数声明时而不是运行时使用变量的值?

javascript - 避免闭包引起的 jQuery Mobile 内存泄漏