Tak, tylko uważaj z event.target
. Przykład:
<div id="jakies_id">
Ale to jest <strong>fajne</strong>
</div>
Jak klikniesz na "Ale to jest", to efekt będzie taki, jaki miał być. Ale jak klikniesz na fajne
, otrzymasz:
Ale to jest **nowa zawartosc **
Nie o to chodziło, prawda? Dzieje się tak dlatego, że event.target
wskazuje na element, który wywołał zdarzenie. Jeśli klikniesz na <strong>
, wtedy event.target
wskazuje właśnie na <strong>
. Zamiast tego użyj event.currentTarget
lub po prostu this
:
document.getElementById("jakies_id").addEventListener("click", function (event) {
event.currentTarget.innerHTML = "nowa zawartosc";
});
document.getElementById("jakies_id").addEventListener("click", function () { // już nawet nie musisz używać event
this.innerHTML = "nowa zawartosc";
});
Dlaczego działa prosty this
? Dlatego, że funkcje przekazane do listenera są bindowane w taki sposób, żeby zarówno this
, jak i event.currentTarget
wskazywały na element, na którym wywołujesz addEventListener()
. Innymi słowy, this === event.currentTarget
to true
.
Niestety ubolewam trochę nad nazewnictwem, bo target
i currentTarget
to mylące nazwy i przez to większość ludzi nawet nie wie, że używanie target
często prowadzi do błędów.