連載:改造WebアプリケーションUIビフォー/アフター

第2回 Webアプリ改造の前に「速習! jQuery/jQuery UI」

葛西秋雄
2010/03/05
Page1 Page2 Page3

jQueryのイベントを理解する

 jQueryは、クロスブラウザ対応の各種イベントを登録するAPIをサポートしています。例えば、div#box要素をクリックしたときのイベントを登録するには、リスト11のように記述します。ここでは、div#box要素をクリックしたときCSSのクラス「highlight」を追加して、背景色を「赤」に書き換えています。「this」には、イベントのトリガーとなった要素「div#box」が格納されています。

.highlight {
  background-color: Red;
}

……中略……

$('#box').click(function() { // div#box要素にclickイベントを登録
  $(this).addClass('highlight'); // div#box要素にCSSのクラス追加
});

……中略……

<div id="box">box</div>
リスト11 div#box要素をクリックしたときのイベントを登録

 複数のイベント処理を行うには、bindメソッドを利用すると便利です。リスト12では、mouseoverとmouseoutイベントを登録して、div#box要素の背景色をトグル(切り替え)しています。マウスをボックス上に移動すると背景色が「赤」に変わり、マウスをボックスの外に移動すると元の「白」に復元されます。

$('#box').bind('mouseover mouseout', function() {
  $(this).toggleClass('highlight');
});
リスト12 mouseover/mouseoutイベントでdiv#box要素の背景色をトグル

 jQueryは、JavaScriptがサポートしているイベントのほかに、hoverメソッドのようなカスタム・イベントもサポートしています。hoverイベントを登録するとmouseover/mouseoutイベントを個別に処理できます。

$('#box').hover(
  function() { // mouseover
    $(this).toggleClass('highlight');
  },
  function() { // mouseout
    $(this).toggleClass('highlight');
  });
リスト13 hoverメソッドによるmouseover/mouseoutイベントでの処理

■イベントの伝播(でんぱ)を理解する

 ネスト(入れ子)している要素にイベントを登録すると、親要素と子要素にもイベントが伝播します。リスト14では、ul/li要素が3階層にネストしている状態で、li要素にクリック・イベントを登録しています。このイベント・ハンドラでは、要素の前景色を「赤」に変えます。

$('li').click(function(event) {
  $(this).css('color', 'red');
});

……中略……

<ul>

  <li id="1">item 1</li>

  <li id="2">item 2
    <ul>
      <li id="21">item 2.1</li>
      <li id="22">item 2.2
        <ul>
          <li id="221">item 2.2.1</li>
          <li id="222">item 2.2.2</li>
          <li id="223">item 2.2.3</li>
        </ul>
      </li>
      <li id="23">item 2.3</li>
    </ul>
  </li>

  <li id="3">item 3</li>

</ul>
リスト14 ネストしている要素におけるイベントの伝播

 item 1とitem 3をクリックしたときはイベントが伝播しませんが、item 2をクリックすると子要素のitem 2.1〜item 2.3に伝播します(図3)。さらに、item 2.2の子要素item 2.2.1〜item 2.2.3にも伝播します。同様に、item 2.2.1をクリックすると親要素のitem 2.2、item 2にも伝播します。つまり、親要素と子要素双方に伝播します。


図3 item 2.1をクリックすると親要素と子要素にイベントが伝播する

 イベント・ハンドラで、トリガーとなった要素を知りたいときはeventオブジェクトのtargetプロパティを参照します。イベントが親要素に伝播するのを中止させるには、eventオブジェクトのstopPropagationメソッドを実行します。stopPropagation()メソッドを実行する代わりにイベント・ハンドラから「return false」で戻っても同じ効果があります。

$('li').click(function(event) {
  $(this).css('color', 'red');
  console.log(event.target.id); // トリガーとなった要素のIDを出力
  event.stopPropagation(); // 親要素へのイベントの伝播を中止する
});
リスト15 eventオブジェクトのtargetプロパティによるトリガー要素の出力



 INDEX
  改造WebアプリケーションUIビフォー/アフター
  第2回 Webアプリ改造の前に「速習! jQuery/jQuery UI」
    1.jQueryのHello World
  2.jQueryのイベントを理解する
    3.jQuery UIのプラグインをざっくり理解する

インデックス・ページヘ  「改造WebアプリケーションUIビフォー/アフター」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH