すごく今更な話ではあるけれども、
jQuery1.9以上になると、live関数が廃止されたりしてソースの書き換えが必要になる。
そこでよく使われるbind(イベントの付与)の書き方を書いていこうと思う。
■bindの書き換え
//1つのイベントだけ付与する場合
$(".hoge").on("click",function(e){
// click event
});
//複数のイベントを付与する場合
$(".hoge").on({
mouseover:function(e){
//mouseover event
},
mouseout:function(e){
//mouseout event
}
});
bind()がon()になった感じで大丈夫。
■liveの書き換え
//1つのイベントだけ付与する場合
$(document).on("click","a",function(e){
//click event
});
//複数のイベントを付与する場合
$(document).on({
mouseover:function(e){
//mouseover event
},
mouseout:function(e){
//mouseout eveent
}
},"a");
これであれば後から生成されたDOM要素にもイベントが付与される。
■delegateの書き換え
//1つのイベントだけ付与する場合
$(".foo").on("click","a",function(e){
//click event
});
//複数のイベントを付与する場合
$("foo").on({
mouseover:function(e){
//mouseover event
},
mouseout:function(e){
//mouseout eveent
}
},"a");
live()をon()に書き換えたのとほぼ同じ。そもそものlive()とdelegate()の使い分けって?っていうのは後述。
■unbind、undelegate、dieの書き換えoff
//全イベントを削除
$(".hoge").off();
//あるイベントのみ削除
$(".hoge").off("click");
■delegate()とlive()の違い
今ではon()とoff()なのでそこまで気にする必要はないけど、
そもそものlive()とdelegate()の違いとしては下記のような感じ。
・liveはdocumentから見た特定の要素になるけれど、delegateはある要素からみた特定の要素
・パフォーマンスとしてはdelegate > live
あまりメモリを消費したくないとか、documentからの指定だとたまにここには付けたくないのに…
といったことが起こってしまうので、基本的にはdelegate推奨だと思う。
もちろん最新版のjQueryであるならばそんなこと気にせずにon()で書いてあげればいいだけではあるけれども。
ということでこうやって書き換える事が可能。
googleのCDNライブラリを使っているとバージョンが自動的に変わってくれるから便利だが、
だからこそ消えていくAPIがあるので、これらを修正しないといけなかったりする。
CDNからjQueryを読み込んでいるサイトの場合は下手すると、動いていなかったとかあると思う。
なのでそういった場合にはCDNの読み込みバージョンを落とすか、
CDNではなくjQueryをローカル保存形式で使うか、
今記述しているjQueryの修正をする必要があるのではないかと。

0 件のコメント:
コメントを投稿