Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2010-02-19

「addEventListenerの第三引数がtrueの場合は、その要素自信で発生したイベントを捕まえない」が守られてない件

18:36

JavaScript を習い始めて最初につまった疑問であり、今までずーっと放置していた addEventListener の第三引数の謎が、id:Constellation さんの助言と id:piro_or さんに紹介していただいた↓によって解決した。皆さま、どうもありがとうございました。


上の monjudoh さんの素晴しい記事には続きがあって、Firefox と Safari は DOM2 Events の仕様↓に違反しているということなのだけど、今やってみたところ、晴れて Opera もチョイワルブラウザの仲間入りを果たしていた。

A capturing EventListener will not be triggered by events dispatched directly to the EventTarget upon which it is registered.

Document Object Model Events

つまり、elem.addEventListener('click', handler, true); とやった場合は elem が click された時には handler が呼ばれてはいけない。

DOM3 Events の草案はどうなってるのかな、と思って見てみると、

useCapture of type boolean

If true, useCapture indicates that the user wishes to add the event listener for the capture phase only, i.e. this event listener will not be triggered during the target and bubbling phases. If false, the event listener must only be triggered during the target and bubbling phases.

Document Object Model (DOM) Level 3 Events Specification

DOM2 Events と同じ意味だね (汗)

というわけで、Firefox3.6 も Safari4 も Chromium も Opera10.10 も Opera10.50 も違反していることになってしまうので、とりあえずメールしてみた


修正されました

2010年4月21日の草案で修正されました。ヤッター。

If true, useCapture indicates that the user wishes to add the event listener for the capture phase and target only, i.e. this event listener will not be triggered during the bubbling phase. If false, the event listener must only be triggered during the target and bubbling phases.

http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#addEventListener_useCapture

↑強調したところ。

 |