デザイナーにも分かりやすいjQuery入門講座|jQueryの使い方

このエントリーをはてなブックマークに追加
索引
Core:コアとなる仕組み
Selectors:セレクタ
Attributes:属性
Traversing:対象の変更
Manipulation:操作
CSS:スタイルシート
Events:イベント
Effects:演出効果
Ajax:xml等との連携
Utilities:ユーティリティ
Data:データ
Miscellaneous:諸々
Deferred:処理管理
Callbacks:コールバック
Internals:内部処理

.bind( )イベント発生時に実行する処理を設定します

構文

イベント発生時に実行する処理を設定します返値:jQueryオブジェクト
jQo.bind( イベント名 [, object], function)ver1.0〜
jQo.bind( object )ver1.4〜
jQo.bind( イベント名 [, object], false)ver1.4.3〜

機能

jQueryオブジェクトで指定した要素にイベントが発生した時に実行するfunctionを設定します。利用できるイベントは左メニューのマウスイベント(click)〜ロードイベント(ready)※ただしhover,toggleは除くです。

ver1.4からはobjectオブジェクトを利用して、一度に複数のイベントを設定できます。ver1.4.3からは最後の引数にfalseを設定することで、イベントフロー(バブリング)とブラウザ本来の機能を停止させることができます。

bindメソッドは動的な要素(プログラムで後から追加された要素)にイベント処理を設定することはできません(メモ「動的な要素に対応していません」にサンプルがあります)。 現在では利用せずにonを利用するようにしてください。

解説

イベント発生時に実行する処理を設定

サンプル(bind/01.html)を開いてbody内にdiv要素が1つあることを確認してください。jQueryは以下の様に記述され、bindメソッドの引数にイベント名の「click」とfunctionの「clickFunc」が設定されています。イベント名は文字列で設定するのでクォートを忘れないでください

$(function () {
	$("div").bind("click", clickFunc);
});

bindメソッドの引数に設定するfunctionは以下の様な構文になっています。まず引数(イベントオブジェクト)を受け取ります。そしてイベント名で指定したイベントが発生したら実行したい処理を{}の中に書きます、何かをreturnする必要はありません。イベントオブジェクトは別項にまとめてあります。

bindメソッドに設定するfunctionの構文
function 任意の名前(イベントオブジェクト){
 イベント名で指定したイベントが発生したら実行したい処理
}

サンプルbind/01.htmlで利用したclickFuncは以下の様になっており、アラートで「click」と表示します。

function clickFunc(eo){
	alert("click");
};

結果として、div要素をクリックするとアラートで「click」と表示されます。
functionの設定は無名関数を利用することが多いです。→サンプル(bind/01b.html

$("div").bind("click", function(eo){
	alert("click");
});

複数のイベントに共通のfunctionを設定

bindメソッドのイベント名は半角スペースを挟むことで複数のイベントに共通のfunctionを設定できます。
サンプル(bind/02.html)を開いてbody内の構成はbind/01.htmlと同じ事を確認してください。jQueryもほとんどbind/01.htmlと同じで、異なるのは以下の様にイベント名に半角スペースを挟んで「mouseenter」が追加されている点だけです。

$(function () {
	$("div").bind("click mouseenter", clickFunc);
});

結果として、div要素にマウスカーソルが入った時(mouseenter)もアラートで「click」と表示されます。この構文では各イベントとも共通のfunctionしか設定できません。複数のイベントに異なるfunctionを設定したい場合は2項先の「まとめて複数のイベントを設定する」の構文を利用します。

objectオブジェクトをfunctionに渡す

イベント名とfunctionの間(つまり第2引数)にobjectオブジェクトを設定することで、実行するfunctionにデータを渡すことができます。データはイベントオブジェクトのdataプロパティを介して渡されます。
サンプル(bind/03.html)を開いてbody内の構成はbind/01b.htmlと同じ事を確認してください。

jQueryは以下の様に記述され、bindメソッドの第2引数にtestプロパティが10の値を持ったobjectオブジェクトが設定されています。このデータはイベントオブジェクト(eo)を通してfunctionに渡され、dataプロパティの値として取得できます。このサンプルでは、この値をアラートで表示します。

$("div").bind("click", {test:10}, function(eo){
	alert(eo.data.test);
});

結果として、div要素をクリックすると第2引数で渡されたtestプロパティの値「10」がアラートで表示されます。

まとめて複数のイベントを設定する

bindメソッドは引数にobjectオブジェクトを設定することで、複数のイベントにそれぞれ個別のfunctionを設定できます。サンプル(bind/04.html)を開いてbody内の構成はbind/01.htmlと同じ事を確認してください。

jQueryは以下のように「eventObj」というobjectオブジェクトを作成し、そのプロパティとしてイベント名を設定します。サンプルではmouseenterとmouseleaveのイベントを設定し、実行したいfunctionを代入しています。mouseenterで背景色をオレンジに、mouseleaveで背景色を青にしています。

eventObj = new Object();
eventObj.mouseenter = function(eo){
	$(this).css("background-color","#f93");
};
eventObj.mouseleave = function(eo){
	$(this).css("background-color","#09c");
};

作成したobjectオブジェクトは以下の様にbindメソッドの引数として設定します。結果として、div要素にマウスカーソルを重ねるとdiv要素の背景色がオレンジ色になり、マウスカーソルを外すと青に戻ります。

$(function () {
	$("div").bind(eventObj);
});

構造が分かりにくくなりますが、objectオブジェクトをbindメソッドの引数に直接設定することも可能です。
→サンプル(bind/04b.html

falseを返すfunctionの利用

v1.4.3からbindでfunctionを設定する部分にfalseを設定すると、イベントフローを停止しブラウザ本来の機能も停止することができます。この機能があるため、イベント発生時の処理(function)内で「return false」を実行すると、イベントフローを停止しブラウザ本来の機能も停止するのです

サンプル(bind/05.html)を開いてbody内にa要素が1つあるのを確認してください。jQueryは以下の様に記述され、a要素がクリックされたらtextメソッドを利用してa要素の文字部分を「クリックされたよ」と変更します。

$("a").bind("click", function(){
	$(this).text("クリックされたよ");
	return false;
});

ポイントは3行目の「return false;」です。この処理があるので、a要素をクリックしてもブラウザ本来のリンク処理は実行されません。また、このサンプルでは確認できませんがイベントフローも停止します。これについては使い方を確認してください。→参考:使い方「イベントフロー(1)」

関連項目

設定したイベント発生時の処理を解除したい場合はunbindメソッドを利用します。

メモ

動的な要素に対応していません

bindメソッドは動的な要素(プログラムで後から追加された要素)にイベントを設定する事ができません。サンプル(bind/test01.html)を開いてbody内にbutton要素が1つあることを確認して下さい。

jQueryは以下の部分を最初に確認してください。この処理はサンプルbind/01b.htmlと同じで、div要素がクリックされたらアラートで「click」と表示します。しかしbody要素内にはdiv要素がありません。

$("div").bind("click", function(eo){
	alert("click");
});

div要素は以下のjQueryの処理により、button要素をクリックしたらappendToメソッドによりbody内に追加されます。

$("button").click(function(){
	$("<div />").appendTo("body")			
})

しかしbuttonをクリックしてdiv要素を表示し、そのdiv要素をクリックしてもアラートは出ません。このdiv要素はjQueryによって後から動的に追加した要素だからです。もし動的な要素にイベントを設定したい時は、onメソッドを利用してください。