HTML:
<div>
<button data-id="3">Click Me</button>
</div>
W klasycznym jQuery zrobiłbym:
$("div").on("click","button", test);
function test(){
alert($(this).data("id"));
}
Aby uzyskać data-id
elementu klikniętego
W maszynopisie (w klasie) Używam:
class foo { ...
$("div").on("click", "button", (event) => this.test());
public test(){
alert($(this).data("id")); // "undefined"
console.log($(this));
}
....
}
Tutaj nie dostaję klikniętego elementu - instancja klasy to $(this)
.
Co zrobiłem źle?
Nie robisz niczego złego - to TypeScript było trochę zbyt pomocne. Metody klasy wewnętrznej "this" traktowane są tak, jakby zawsze odnosiły się do odpowiedniego obiektu. Masz więc dwa rozwiązania - złap kliknięty element za pomocą właściwości 'event.target' lub zdefiniuj funkcję obsługi poza tą klasą. – raina77ow
Jak widać większość odpowiedzi jest niepełnych lub błędnych. odwiedź moją odpowiedź tutaj: http://stackoverflow.com/questions/38159416/using-the-this-in-event-handler-with-typescript/38159643?noredirect=1#comment63747929_38159643 –