2008年11月01日

JavaScriptのイベント

JavaScriptのaddEventListenerとremoveEventListenerの使い方にちょっと迷ったので、
ちょっとメモっておこうかと。

※試してみて勝手に解釈した内容なので間違っている可能性が充分にあります。
読まれる場合は参考程度にどうぞ。

両メソッドの三つ目の引数、useCaptureに真偽値を与えることによって、
キャプチャリング、ターゲットノード、バブリングの、
どの段階でイベントを捕捉させるか指定することができる。
キャプチャリングはDOMツリーの上から、
バブリングはDOMツリーの下から探索する。

イベントが発生すると、DOMツリーの上から順にどのエレメントのオブジェクトかを探索していく。
たとえば、次のようなHTMLの場合。

テキスト

エレメントそれぞれにイベントを追加する。

var l1 = document.getElementById('level1');
var l2 = document.getElementById('level2');
var para = document.getElementById('para');

l1.addEventListener(
	'click',
	function() { alert('level1'); },
	false);
l2.addEventListener(
	'click',
	function() { alert('level2'); },
	false);
para.addEventListener('click',
	function() { alert('para'); },
	false);

useCaptureをfalseにした場合、イベントはバブリング段階で捕捉される。
なので、"テキスト"をクリックした場合は、

para → level2 → level1

の順でイベントが捕捉される。

useCaptureをtrueにした場合、そのイベントはキャプチャリング段階で捕捉される。
たとえば、次のように書き換える。

level2.addEventListener(
	'click',
	function() { alert('level2') },
	true);

この場合、"テキスト"をクリックすると、

level2 → para → level1

の順でイベントが捕捉される。

要するに、

useCaptureがtrueのとき
キャプチャリング(DOMツリーをから順にたどっていく)の際に捕捉。
バブリングの際には捕捉されない。
useCaptureがfalseのとき
バブリング(DOMツリーをから順にたどっていく)の際に捕捉。
キャプチャリングの際には捕捉されない。
ってことになる。



タグ :JavaScript

同じカテゴリー(プログラミング)の記事画像
GoogleReaderを3ペイン表示にするスクリプトのα版
文字サイズを拡大縮小するスクリプト
電卓を表示するブックマークレット
Twitterで費やした時間を表示するスクリプト
ニコニコのタグをプレビューするスクリプト
ニコニコで広告を消すスクリプト
同じカテゴリー(プログラミング)の記事
 GoogleReaderを3ペイン表示にするスクリプトのα版 (2009-07-26 22:00)
 クリック動作を無効にするジョークブックマークレット (2009-07-19 23:52)
 文字サイズを拡大縮小するスクリプト (2009-07-12 18:09)
 ダブルクリックでスクロールするスクリプト (2009-07-05 14:22)
 電卓を表示するブックマークレット (2009-06-27 21:40)
 ごくごく一部の顔文字を絵文字に置き換えるスクリプト (2009-05-21 23:06)
Posted by Handle at 23:56│Comments(0)プログラミング
コメントフォーム
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。