jQuery逆引きリファレンス
イベントリスナーを呼び出す際にパラメーターを引き渡すには?(data)
イベントメソッドやonメソッドの呼び出し時に、任意のパラメーターを引き渡す方法を解説する。
イベントリスナーを呼び出す際に、呼び出し側(=イベントメソッドやonメソッド)から任意のパラメーターを引き渡すこともできます。パラメーターを利用することで、処理そのものは共通で、処理の対象や値だけが異なるようなイベントリスナーをいくつも用意する必要はありません。パラメーターを差し替えるだけで、1つのイベントリスナーの挙動を用途に応じて振り分けることができます*1。
- *1 イベントメソッドの解説については、別稿「イベントに応じて処理を実行するには?」を参照してください。
それではさっそく、具体的なサンプルを見てみましょう。以下は、それぞれ押されたボタンに応じて、「「●○」です。」という文字列をダイアログ表示する例です。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>jQuery TIPS</title>
</head>
<body>
<div>
jQueryで対応するメソッド名は?<br />
<button id="btn1">イベントリスナーを設定</button>
<button id="btn2">アニメーションを設定</button>
<button id="btn3">要素にスタイルを追加</button>
<button id="btn4">要素の属性を設定</button>
<button id="btn5">要素のプロパティを設定</button>
</div>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
$(function() {
// 2methodパラメーターの値に応じてメッセージを表示
var onclick = function(e) {
window.alert('「' + e.data.method + '」です。');
};
// 1それぞれのボタンにイベントリスナーを設定
$('#btn1').click({ method: 'on' }, onclick);
$('#btn2').click({ method: 'animate' }, onclick);
$('#btn3').click({ method: 'css' }, onclick);
$('#btn4').click({ method: 'attr' }, onclick);
$('#btn5').click({ method: 'prop' }, onclick);
});
</script>
</body>
</html>
|
イベントリスナーに渡すべきパラメーターは、click
、mouseover
などのイベントメソッドの第1引数に「パラメーター名: 値,……」のハッシュ形式で指定します(1)。この例であれば、唯一のパラメーターとしてmethod
を渡していますが、もちろん、複数のパラメーターを渡したいならば、ハッシュに対して複数のキーを列記してください。
また、on
メソッドでも、以下のようにすることで、同様にパラメーターを引き渡すことができます。
$('#btn1').on('click', { method: 'on' }, onclick);
|
イベントリスナーは、前掲の別稿では匿名関数として渡していましたが、ここでは複数の箇所から参照する必要がありますので、2のように別に関数オブジェクトとして用意しておき、イベントメソッド/on
メソッドには変数として引き渡します。
イベントメソッド/on
メソッド経由で渡されたパラメーターを取得するのは太字の部分、イベントオブジェクトのdata
プロパティの役割です。「e.data.パラメーター名」でアクセスできます。
API:.on() カテゴリ:Events(イベント) > Event Handler Attachment
※以下では、本稿の前後を合わせて5回分(第16回~第20回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
17. 文書ツリー上に存在しない要素に対してイベントリスナーを追加するには?(on)
onメソッドを利用して、動的に新規追加された要素にイベントリスナーを設置する方法を解説。またjQuery 1.6以前のbind/live/delegateメソッドをonメソッドに置き換える方法も説明する。
19. マウスポインターが要素に出入りした時の処理を実装するには?(mouseover、mouseout、mouseenter、mouseleave、hover)
違いが分かりにくい「mouseover/mouseout」と「mouseenter/mouseleave」イベントの使い分け方法を解説。また、これらに関連する「hover」イベントメソッドについても説明する。