2012年2月26日日曜日

[JavaScript]イベントの委譲(delegation)

JavaScriptでは、イベントのバブリングを利用し、親要素にイベント処理を委譲することができます。
イベント委譲の利点は、イベントを発生させる要素ごとにイベントを設定しなくて済み、コードの見通しがよくなることです。

sample


サンプルとして、[start], [stop], [reset] ボタン3つで操作する、10分の1秒単位で計測するストップウォッチを作成しました。

ポイントとしては、
  • 各ボタンの親要素である、id="controller" のdiv要素にのみ、onclick イベントリスナを設定している。(22行目)
  • div要素内でonclickイベントが発生したら、発生元のid属性をチェックし、各ボタンごとの処理を呼び出している。(30行目)

ことです。

サンプルコード

jQueryでイベント委譲する場合


jQuery では、.delegate() メソッドが用意されているので、より簡単にイベント委譲を実装できます。

$("div#controller").delegate("input#start", "click", handler);

まとめ

  • 同一要素内でたくさんのイベントリスナをセットする場合は、イベント委譲でまとめられないか検討する!



参考文献
JavaScript パターン p196 - p197
JavaScriptパターン ―優れたアプリケーションのための作法
JavaScriptパターン ―優れたアプリケーションのための作法

0 件のコメント:

コメントを投稿