イベント
イベントとは
- ユーザーとWebサイトとの間でやりとりを行う処理を「イベント」と呼びます
- イベントには、「ユーザーイベント」と「ブラウザイベント」の2種類があります
- ユーザーイベントは、キーボードやマウスを操作することで実行されます
- ブラウザイベントは、おもにWebブラウザに関連するイベントです
イベントの設定
- イベントを設定する構文はonメソッドを使用します
- 「イベントハンドラ」とは、イベントが発生したタイミングで実行される関数です
《定義》
$( セレクタ ).on( 'イベント名', 'イベントハンドラ' );
《例》
$( セレクタ ).on( 'click', function(){ alert( 'クリックされました' ); } );
《onメソッドを使用しない場合》
$( セレクタ ).イベント名( 'イベントハンドラ' );
《例》
$( セレクタ ).click( function(){ alert( 'クリックされました' ); } );
イベントデータ
- onメソッドの構文は、次のような記述もできます
《定義》
$( 親セレクタ ).on( 'イベント名', '子セレクタ', 'イベントハンドラ' );
《定義》
$( セレクタ ).on( 'イベント名', 'イベントデータ', 'イベントハンドラ' );
- onメソッドを使用しない方法
《定義》
$( 親セレクタ ).イベント名( 'イベントデータ', 'イベントハンドラ' );
- イベントデータは、オブジェクト型のデータです
$( '#btn' ).click( //clickイベントの設定 { msg : 'クリックされました' }, //イベントデータ function( e ){ alert( e.data.msg ); } //イベントハンドラ );
イベントデータをイベントハンドラ内から参照する場合は、イベントハンドラの引数eから参照することになります。
- イベントデータはオブジェクト型なので、次のような構文になります
《定義》
( 'key' : 'value' ) //イベントデータの中身の構造
複数ある場合は、
《定義》
( 'keyA' : 'valueA', 'keyB' : 'valueB', 'keyC' : 'valueC' )
イベントハンドラ
- イベントが発生したタイミングで実行される関数
《定義》
イベントハンドラ( handler ) = function( 'イベントオブジェクト' ){ };
- イベントデータのコードで出てきた引数eが、イベントオブジェクトにあたりますが、使用しない場合は省略することもできます
$( '#btn' ).click( //clickイベントの設定 { msg : 'クリックされました' }, //イベントデータ function( e ){ alert( e.data.msg ); } //イベントハンドラ );
id名画「btn」である要素にclickイベントを設定しています。
ユーザーがこの要素をクリックしたタイミングで、イベントハンドラ関数が実行されます。
- 引数eは、dataオブジェクトをプロパティとして持っています
- このdataオブジェクトがイベントデータを参照しています
e.data = { msg : 'クリックされました' }
イベントオブジェクト
- 組み込みオブジェクト
《例》
$( document ).on( 'mousemove', function(e){ $( 'input' ).val( 'e.pageX : ' + e.pageX + ', e.pageY' + e.pageY ); } );
この記述は、マウスを動かすとマウスの座標を取得し、input要素のvalue属性に値を代入します。
イベントの設定(登録)
- 1つのセレクタに対して複数のイベントを登録する場合は、次のような記述になります
$( '#btn' ).click( function( ){ } ); $( '#btn' ).mouseover( function( ){ } ); $( '#btn' ).mouseout( function( ){ } );
onメソッドを使用して簡潔に記述をすると
$( '#btn' ).on( { 'click' : function( ){ }, 'mouseover' : ( function( ){ }, 'mouseout' : function( ){ } } );
もし、3つのイベントのイベントハンドラが同じであれば、以下のように記述できます。
$( '#btn' ).on( 'click mouseover mouseout' : function( ){ } );
ショートカットメソッドを使用しても、onメソッドをしても処理的には同じです。
ユーザーイベントとブラウザイベント
- clickイベントやmousemoveイベントは、ユーザーの操作によって発生するイベントで、ユーザーイベントと呼ばれます
- ブラウザイベントは、Webブラウザに関連するイベントになります
resizeイベント
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ウィンドウリサイズの値を取得</title> <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(function() { $( window ).on( 'resize', function() { $( 'input' ).val( $( window ).width() + ' : ' + $( window ).height() ); }); }); </script> </head> <body> <p><input type="text" value=""></p> </body> </html>
clickイベントの設定
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>clickイベントを設定</title> <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(function() { $( '#btn' ).click( function() { $( '#input' ).val( 'ボタンをクリックしました' ); }); }); </script> </head> <body> <p><button id="btn">ボタン</button></p> <p><input type="text" value="" id="input"></p> </body> </html>
《定義》
$( セレクタ ).イベント名( ‘イベントハンドラ' );
$( セレクタ ).イベント名( ‘イベントデータ', ‘イベントハンドラ' );
上の記述を書き換えてみると、以下のようになります。
<script> $(function() { $( '#btn' ).click( //clickイベントを設定 { msg : 'ボタンをクリックしました' }, //イベントデータを設定 function( e ) { //イベントハンドラ関数を設定 $( '#input' ).val( e.data.msg ); //valメソッドでテキストを設定 }); }); </script>
- イベントデータのオブジェクトにmsgプロパティを設定し、値に「ボタンをクリックしました」を設定しました
- このイベントデータがイベントハンドラの引数eに渡され、dataオブジェクトに格納されます(引数名eは任意)
- e.data.msgで参照されます