首页 >web前端 >js教程 >如何在事件处理程序中正确使用 jQuery 的 $(this) 和 ES6 箭头函数?

如何在事件处理程序中正确使用 jQuery 的 $(this) 和 ES6 箭头函数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-14 06:15:12380浏览

How to Correctly Use jQuery's $(this) with ES6 Arrow Functions in Event Handlers?

将 jQuery $(this) 与 ES6 箭头函数(词法 this 绑定)结合使用

使用 ES6 箭头函数绑定事件处理程序可能会出现问题使用 jQuery 的 $(this) 选择器。这是因为箭头函数在词法上绑定了 this 关键字,这可能不是 jQuery 回调中所需的行为。

以下示例说明了该问题:

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}

在上面的示例中,使用单击事件处理程序的箭头函数会导致 $(this) 引用 Game 实例而不是单击的元素。这是因为箭头函数没有自己的 this 绑定,因此它们从周围的作用域继承它。

解决方案

要解决此问题,请避免使用箭头函数绑定 jQuery 事件处理程序时。相反,使用传统的函数声明或使用 bind 方法显式绑定 this 关键字:

class Game {
  foo() {
    this._pads.on('click', function() {
      if (this.go) { $(this).addClass('active'); }
    }.bind(this));
  }
}

或者,您可以使用 event.currentTarget 访问单击的元素:

class Game {
  foo() {
    this._pads.on('click', (event) => {
      if (this.go) { $(event.currentTarget).addClass('active'); }
    });
  }
}

使用事件.currentTarget 提供对触发事件的元素的访问,无论回调函数的绑定上下文如何。

以上是如何在事件处理程序中正确使用 jQuery 的 $(this) 和 ES6 箭头函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn