・イベントによって生成された要素にbind()するには。
生のHTMLに書かれた要素に対してイベント登録するには
単純にbind()すればよい。
だが、イベント発生後にJavaScriptで生成された要素に対してイベント登録するには
要素の作成時にbindしなくてはならない。
$("#submit-1528237246").bind("click", function (event) {
$("#tags").append("<p><span class=\"tag\">"+$("#tag").val()+"</span> <span class=\"rm\">×</span></p>");
rmTag();
});
function rmTag(){
$(".rm").unbind();
$(".rm").bind({
click:function(event){
$(this).parent().remove();
},
mouseenter:function(){
$(this).css("cursor","pointer");
},
mouseleave:function(){
$(this).css("cursor","default");
}
});
}
2行目によってクリック時に要素を追加する設定をしている。ここで追加された要素に対してイベント登録するには、この作成時の時点で
イベント登録を行わなければならない。
なので3行目でイベント登録する関数を呼び出している。
・bindによるイベント登録は上書きではなくappend
ちなみに、7行目でunbindしているのは下記のサイトで説明されているよう
bindは上書きではなくappendしていくためだ。
jQueryのイベント時の関数を上書きする
上記のソースのようにイベント発生時にrmクラス全てにイベント登録して
いくと、最初の方にbindされた要素は同じイベント登録が複数回appendされて
しまうため、毎回全登録をunbindしている。
・一つの要素に複数のイベント登録をするには
また、一つの要素に複数のイベント登録をするには8~18行目のようにする。
・"hover"はbind()で使用できない。
下記のようにhover()という関数を使ってイベント登録をできるが、
これをbind()で実現するには上記のソースのように、mouseenterとmouseleaveに
分けて記述する必要がある。
$(function(){
$(".rm").hover(
function(){
$(this).css("cursor","pointer");
},
function(){
$(this).css("cursor","default");
}
);
$(".rm").click(
function(){
$(this).parent().remove();
}
);
});
0 件のコメント:
コメントを投稿