楽しく学べる学習サイト!Lanavi
楽しく学べる学習サイト!Lanavi

読切記事

この記事のジャンル Javascript
スポンサードリンク

jQueryを使って、イベントをunbindするときの問題

投稿者:regene
 
この記事の評価(-件)   -点
記事更新日 2009年08月21日 01:38
 
今回は、javascriptの話。

jQueryを使うと、簡単にイベント登録ができます。

-----------------------------------------------------------
$('aaa').click(test);
$('aaa').one(test);
$('aaa').live('click', test);
$('aaa').bind('click', test);

function test() {
alert('test');
}
-----------------------------------------------------------

それぞれ動きの詳細は違いますが、上の4行は、どれでもイベントの登録ができます。
下記のように直接引数に無名関数を記述することもできます。

-----------------------------------------------------------
$('aaa').click(function() {
alert('test');
});
$('aaa').one(function() {
alert('test');
});
$('aaa').live('click', function() {
alert('test');
});
$('aaa').bind('click', function() {
alert('test');
});

-----------------------------------------------------------

で、まず最初にちょっと悩んだのが、呼び出したい関数に引数を渡したい場合。

下記の3行目の処理はOKですが、2行目のようには書けません。

-----------------------------------------------------------
var str = 'test';
$('aaa').click(test('test')); //------- ×
$('aaa').click(function(str) { //------ ○
alert('test');
});

function test(str) {
alert(str);
}
-----------------------------------------------------------

じゃあ、3行目のように書けばいいじゃないかと言われそうなとこなのですが、この場合、unbindしたいときに、問題が起きます。

unbindは一度登録したイベントを解除する処理です。
下記のように使えます。
-----------------------------------------------------------
$('aaa').click(test); // イベントの登録
$('aaa').unbind('click', test); // イベントの解除
-----------------------------------------------------------

unbindの第二引数には、メソッド名を渡しています。
つまり、イベント登録を、無名関数で行っている場合は、解除できません。
(クリックイベントをすべて解除するだけならできる)

ここで、少し悩んでいたのですが、bindメソッドでは、引数を渡せることが分かりました。下記のように書きます。
-----------------------------------------------------------
$('aaa').bind('click', {str:'test'}, test); // イベントの登録
$('aaa').unbind('click', test); // イベントの解除

function test(arg) {
alert(arg.str);
}
-----------------------------------------------------------

bindするときの第二引数にハッシュ(連想配列)を渡すことができます。
この方法だとunbindもできて、万事OK!


(↑の記事は、ソースを見ないで、思い出しながら書いてるので、誤りがあるかもしれません)
 
この記事を評価する
ログインすると、記事を評価することができます。
コメント
まだ、コメントはありません。
コメントを投稿する
ログインすると、コメントを投稿することができます。
ジャンル一覧