我最初是这样做的:
$('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
没有工作。我最终在 click 函数中传递了原始代码。所以我改为使用名称间隔事件:
$('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
.
这样做的用途是首先处理页面的一个区域,然后在其中的链接上完成绑定。然后,处理子区域,如果其中一个有自己的代码,则该区域的处理程序必须解除绑定并替换为子区域的处理程序。所有这一切的原因是子区域是动态放置在区域中的,因此永远不会事先知道它们将是什么。哦,以防万一,这是 jQuery 1.72
所以:
<div id="region" class="ocontainer">
<div id="subregion" class="ocontainer">
<a>
在区域的处理上,链接绑定到click.region和一个传递'region'的函数。然后,click.region 应该是未绑定的,它是,并且 click.subregion 绑定在它的位置,并使用传递“subregion”的函数,这不会发生。