You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery点击事件箭头函数中this为undefined的原因咨询

问题:jQuery点击事件中this无法获取按钮元素,输出undefined?

代码片段

JavaScript

$('.myclass').click(() => {
  let myvar = this;
  console.log(this.tagName);
})

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<li><button class="myclass">click me</button></li>

控制台输出undefined,预期是button标签,需要获取按钮的data-*属性,但无法通过this获取元素,请问原因是什么?


解答

核心原因是箭头函数不绑定自身的this上下文,它会继承外层作用域的this,而非指向触发事件的DOM元素。

在jQuery的事件回调机制中,只有使用普通函数作为回调时,this才会被自动绑定到触发事件的DOM元素。而你用了箭头函数,这里的this实际指向的是外层作用域(比如全局window对象,严格模式下为undefined),所以无法拿到按钮元素。

两种解决方法:

  1. 改用普通函数作为回调:
$('.myclass').click(function() {
  console.log(this.tagName); // 输出 BUTTON
  // 获取data属性示例:$(this).data('yourAttrName')
});
  1. 若坚持使用箭头函数,通过事件对象的currentTarget获取元素:
$('.myclass').click((e) => {
  console.log(e.currentTarget.tagName); // 输出 BUTTON
  // 获取data属性示例:$(e.currentTarget).data('yourAttrName')
});

注意:e.target可能指向事件触发的子元素,而e.currentTarget始终指向绑定事件的元素,更适合你的场景。


内容的提问来源于stack exchange,提问作者R-obert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:16