Nicholas C. Zakas「Event delegation in JavaScript」
NCZOnline 2009.6.30のブログエントリ
Event delegation in JavaScript
あまり良く分かっていないEvent Delegationのチュートリアル記事。
例が分かりやすかった
気になるところだけ斜め読み
- 歴史
- addEventLisenterの三番目の引数
- trueだとcaputuringモデル
- falseだと、bubblingモデル
- event delegation
- bubblingモデルを使うのがポイント
- ieのattachEvent()はbubblingモデルだし
- bubblingモデルで伝播するイベントは、マウスとキーボード関連のイベントのみ
- よく使うイベントはそろってるので困らない
- bubblingモデルを使うのがポイント
document.onclick = function(event){ //IE doesn't pass in the event object event = event || window.event; //IE uses srcElement as the target var target = event.target || event.srcElement; switch(target.id){ case "help-btn": openHelp(); break; case "save-btn": saveDocument(); break; case "undo-btn": undoChanges(); break; //others? } };
- documentオブジェクトへイベントをセット
- イベントオブジェクトと、イベントが発生したエレメントを取得
- あとはイベントが発生したオブジェクトが何であるかによって、処理を割り当ててく。
- caputuingモデルでevent delegation
- 無理じゃないけどIE(6-8)では動かない
- (補足)ie9ではサポートされてる