TypeScript:在事件中使用jquery$(this)

TypeScript:在事件中使用jquery$(this),jquery,typescript,Jquery,Typescript,HTML: 获取所单击元素的数据id 在TypeScript(类中)中,我使用: 这里我没有得到单击的元素-$(this)是类的实例 我做错了什么?根据“this”是指该方法所属/所调用的类的实例 可以使用传递给回调的事件对象的target属性: class foo { ... $("div").on("click", "button", (event) => this.test()); public test(){ alert($(this).data("id")); //

HTML:

获取所单击元素的
数据id

在TypeScript(类中)中,我使用:

这里我没有得到单击的元素-
$(this)
是类的实例

我做错了什么?

根据“this”是指该方法所属/所调用的类的实例

可以使用传递给回调的事件对象的target属性:

class foo { ...
 $("div").on("click", "button", (event) => this.test());

 public test(){
    alert($(this).data("id")); // "undefined"
    console.log($(this));
 }

....
}

event.currentTarget
,具体取决于您是否希望获取实际单击的元素或捕获事件的元素。

通过使用箭头函数
(event)=>TypeScript
,您可以从词汇上对此进行绑定。(在编译代码中,以前捕获的实例称为
\u this

如果您切换到使用普通函数语法,您应该能够像通常一样使用
$(this)

class foo {
  public test(evt){
    alert($(evt.target).data("id")); // "undefined"
    console.log($(evt.target));
  }
}

显然,您对调用的测试方法的实例有问题,但我认为值得分享。

使用
事件。当尝试获取所单击内容的数据属性时,currentTarget对我很有效

$("div").on("click", "button", function(event) { this.test()});

你没有做错任何事——打字脚本有点太有用了。类内方法
被视为总是引用相应的对象。因此,您有两种解决方案—要么使用
event.target
属性捕获单击的元素,要么在该类之外定义处理函数。正如我所看到的,大多数答案都不完整或错误。请访问我的答案:我使用$(“div”)。在(“单击”,“按钮”,“事件)=>this.test(事件));在函数中:publictest(元素:JQueryEventObject){$(element.target)}。。。。它的工作-谢谢你@用户3351722:谢谢。这解决了访问事件目标和类的实际问题。我不得不使用这个答案,而不是建议的答案,因为我在尝试用自己的扩展方法扩展jQuery.fn时遇到了同样的问题,它不像事件那样提供对“This”的替代引用。这也为我工作!谢谢
class foo {
  public test(evt){
    alert($(evt.target).data("id")); // "undefined"
    console.log($(evt.target));
  }
}
$("div").on("click", "button", function(event) { this.test()});
$('.elementID').click(e => this.clickedElement(e));


clickedElement(e: JQueryEventObject) {
    var iWasClickedData = $(this).data('key'); // will not work
    var iwasClickedDataFixed = $(e.currentTarget).data('key'); // will work
}