【问题标题】:Why JQuery $(this) does not work in arrow functions [duplicate]为什么 JQuery $(this) 在箭头函数中不起作用 [重复]
【发布时间】:2020-03-08 09:13:51
【问题描述】:

我正在尝试使用 $(this) 以便能够在箭头中使用 jQuery 对象,但它不起作用

$('.btnReserve').click(function(){
        var element_div = $(this).closest('div');
        console.log(element_div.attr('id');
    });

效果很好

但是……

$('.btnReserve').click(() => {
        var element_div = $(this).closest('div');
        console.log(element_div.attr('id');
    });

$(this) 不起作用

为了得到想要的结果,我使用了下面的方法

$('.btnReserve').click((event) => {
        var element_div = $(event.target).closest('div');
        console.log(element_div.attr('id');
    });

【问题讨论】:

  • 定义不起作用...
  • 这就是箭头函数的主要区别之一。他们在定义时维护this。如果箭头函数的特性与用例不匹配,请不要使用它。
  • "箭头函数没有自己的this".
  • 尝试使用文档级事件监听器

标签: jquery ecmascript-6 arrow-functions


【解决方案1】:

带有箭头的函数this指的是直接在你创建的函数作用域之外的作用域。

对于常规函数,this 指的是全局范围或绑定范围(在您的情况下为 jquery 对象)

() => {} 和(function () {}).bind(this) 是一样的

尝试使用传递给你的函数的事件

$('.btnReserve').click((event) => {
    const element_id = event.target.id;
    console.log(element_id );
});

【讨论】:

  • 感谢您的洞察,但就我而言,我想使用 JQuery $(this),以便能够通过 .parent() 等方法使用 JQuery 对象。
  • 好的,所以不要使用箭头函数 :-)
  • 在上面编辑过的问题上,我使用了箭头函数,它起作用了
  • 虽然@SwalehMatongwa你不能使用这个
  • 向我解释为什么我不应该使用 @Neal,因为该方法使我能够选择确切的元素,因为 $('.btnReserve') 可能匹配多个元素,但如果我使用 $(event.target),我可以选择特定的元素被点击的元素。
猜你喜欢
  • 1970-01-01
  • 2018-03-22
  • 2016-03-16
  • 2021-04-22
  • 2023-03-15
  • 2017-12-06
  • 1970-01-01
  • 2017-03-06
  • 2020-10-19
相关资源
最近更新 更多