DOM Event の target

DOM Event の target と currentTarget の違いについて
5
:tetsuharu @saneyuki_s

addEventListenerに指定した無名関数をremoveEventListenerしたいばあい、event.currentTarget.removeEventListener(event.type, arguments.callee)ってやればいいことに気付いた

2010-10-18 23:51:46
Atsushi Takayama @edvakf

@saneyuki_s currentTarget じゃなくて target です。

2010-10-18 23:59:53
:tetsuharu @saneyuki_s

@edvakf event.targetでは、eventの発生要素になってしまって、event発生要素の先祖要素にイベントリスナを設定した時に使えなくなりませんか?

2010-10-19 09:51:47
Atsushi Takayama @edvakf

@saneyuki_s addEventListener した要素でしか removeEventListener できないので、target だったら必ずそうなりますが currentTarget ではそうならないんじゃないでしょうか。なんか自信なくなってきた。

2010-10-19 10:13:31
:tetsuharu @saneyuki_s

@edvakf ページ中にbutton(と呼ぶ要素)がある状態で、windowにaddEventListener("click", 匿名関数)した(このリスナをAと呼ぶ)場合。

2010-10-19 10:21:08
:tetsuharu @saneyuki_s

@edvakf buttonをクリックしてイベント発生させると、いずれAが呼ばれますけれども、event.targetはbuttonとなるので、event.target.removeEventListenerでは結局windowからはremoveできないような

2010-10-19 10:21:23
Atsushi Takayama @edvakf

@saneyuki_s 勘違いしてたかも。その場合 target は常に window なのだと思っていました。仕様読んできます。

2010-10-19 10:24:08
テラマコ @teramako

Event.target は dispatchEventを実行した要素になるのかな。currentTargetはeventListenしている要素、originalTarget は? explicitOriginalTarget は? このあたりきちんと勉強しないと

2010-10-19 10:24:43
Atsushi Takayama @edvakf

target: Used to indicate the EventTarget to which the event was originally dispatched. http://j.mp/cX68ti なのでバブリングの最深部ということか。

2010-10-19 10:28:13
Atsushi Takayama @edvakf

currentTarget は EventListener が実行されてる要素なので currentTarget.removeEventListener で十分なのか。たぶん。

2010-10-19 10:31:03