mdunisch mdunisch - 5 months ago 78
jQuery Question

Typescript: Using jquery $(this) in event

HTML:

<div>
<button data-id="3">Click Me</button>
</div>


In classic jQuery I would do:

$("div").on("click","button", test);

function test(){
alert($(this).data("id"));
}


To get the
data-id
of the clicked element

In Typescript (in a class) I use:

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

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

....
}


Here I don't get the clicked element -
$(this)
is the instance of the class.

What did I do wrong?

Answer

According to Typescript's spec "this" is referring to the instance of class the method belongs to/is called on.

You could use the target attribute of the event object passed to the callback:

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

Or event.currentTarget depending on if you want to get the element actually clicked on or the element which captured the event.