Jquery 将$(this)in事件处理程序与typescript一起使用

Jquery 将$(this)in事件处理程序与typescript一起使用,jquery,typescript,Jquery,Typescript,我在stackoverflow中看到了许多回答错误的答案,我想至少为自己澄清一下。 老问题:将$(this)in事件处理程序与typescript一起使用。大多数答案都是关于使用event.target 第一个问题是它不仅仅是事件.target(大多数答案都是堆栈溢出)。我还需要检查IE特定的术语(记得jquery之前几天的人至少知道这一点) 第二个问题是传播。 假设我有一些这样的元素 <a href="#"><i class="fa fa-open"><span&

我在stackoverflow中看到了许多回答错误的答案,我想至少为自己澄清一下。 老问题:将$(this)in事件处理程序与typescript一起使用。大多数答案都是关于使用
event.target

第一个问题是它不仅仅是
事件.target
(大多数答案都是堆栈溢出)。我还需要检查IE特定的术语(记得jquery之前几天的人至少知道这一点)

第二个问题是传播。 假设我有一些这样的元素

<a href="#"><i class="fa fa-open"><span>something is here</span></i></a>
如果此元素周围有足够的填充和边距,通过适当的单击,我可以将目标作为三个元素
a
i
span

现在头痛开始了,然后我需要检查它点击了什么,是
a
还是
span
甚至是
I

有时它会带来冗余代码,如果我可以访问$(这个),这些代码是不需要的。 $(这个)的美妙之处在于它返回了我正在收听的项目,跨浏览器

在我的例子中,$(这个)总是引用
a
,而不是任何其他子元素。例如,我知道如果我想访问
i
,我需要在子元素中搜索。但是,就像Typescript让我使用event的方式一样,我需要检查我在DOM中的位置(目标是
span
a
i
!!!),然后我决定在树中爬升或下降,或者在当前元素中进行更改


我知道应该有更好的办法。所以问题是它是什么?

我想您应该使用
事件。currentTarget
而不是target:


附言:你真的支持IE8吗?谷歌、微软和其他公司的大多数网站都不再支持它了。

答案在于实例方法

从typescript 0.91开始,普通方法和实例方法及其
this
之间存在差异。这种差异使我能够访问类内实例和jquery中的实例

示例类如下所示:

$("a").click((evt)=>{
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;
    console.log($(target));
});
class sample{

    field1:number;

    constructor(){
        field1=1;
    }

    method1(){

        let self=this;
        $("a").click(function(event){       
            var target=$(this);  
            console.log(target); // here i have access to the jquery one
            console.log(self.field1); // here i have access to the class level
        });
    }

    method2(){

        $("a").click((event)=>{     
            var target=$(this);  // this will not work bcs it's an instance method 
                                 // the this is refering to the class

            console.log(target); 
        });
    }
}

作为您附加的链接,IE 6到8不支持event.currentTarget。还有其他解决办法吗?是的,我需要支持它,大多数银行和政府部门仍然在使用IE8,下次你经过汇丰银行时,去柜台询问IE versionok,当你在jquery事件处理程序中调用typescript中的$(this)时会出现什么错误?它应该在运行时与javascript中的工作方式完全相同;但您可能会得到一个类型错误,我们可能会对此进行调查。我使用的是实例方法。我把它改为普通函数,现在它可以正常工作了,我从上面的范围中携带了类引用。请看我的答案