私はもともとこれをやっていた:
$('div.ocontainer').each(function() {
var o = $(this);
var newCode = $(this).attr('id');
if (o.parents('.ocontainer').length != 0) {
var oldCode = o.parents('.ocontainer').attr('id');
console.log('unbinding '+oldCode);
$('#'+oldCode+' a').each(function() {
$(this).unbind('click')
})
}
console.log('binding '+newCode);
$('#'+newCode+' a').each(function() {
$(this).click(function() {
decideStMethod(newCode);
})
})
})
...しかし、機能してunbind
いませんでした。元のコードがクリック関数に渡されることになりました。そこで、名前空間イベントを使用するように変更しました:
$('div.ocontainer').each(function() {
var o = $(this);
var newCode = $(this).attr('id');
if (o.parents('.ocontainer').length != 0) {
var oldCode = o.parents('.ocontainer').attr('id');
console.log('unbinding '+oldCode);
$('#'+oldCode+' a').each(function() {
$(this).unbind('click.'+oldCode)
})
}
console.log('binding click.'+newCode);
$('#'+newCode+' a').each(function() {
$(this).bind('click.'+newCode,function() {
decideStMethod(newCode);
})
})
})
...そして今はunbind
機能しますが、その後bind
は機能しません。ただし、bind
DOES を実行している行は、その後にない場合、つまり . が前にない場合に機能することに注意してくださいunbind
。
これを使用すると、最初にページの領域が処理され、その中のリンクに対してバインドが行われます。次に、サブ領域が処理され、そのうちの 1 つに独自のコードがある場合、領域のハンドラーをバインド解除して、サブ領域のハンドラーに置き換える必要があります。このすべての理由は、サブリージョンがリージョンに動的に配置されるため、サブリージョンがどうなるかは事前にわかりません。ああ、念のため言っておきますが、これは jQuery 1.72 です。
そう:
<div id="region" class="ocontainer">
<div id="subregion" class="ocontainer">
<a>
region の処理では、リンクは click.region と「region」を渡す関数にバインドされます。次に、click.region のバインドを解除する必要がありますが、これはそのままで、'subregion' を渡す関数を使用してその場所に click.subregion をバインドしますが、これは行われません。