0

我最初是这样做的:

$('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没有。但是请注意,执行bindDOES 的行如果不是后续行,即如果它前面没有unbind.

这样做的用途是首先处理页面的一个区域,然后在其中的链接上完成绑定。然后,处理子区域,如果其中一个有自己的代码,则该区域的处理程序必须解除绑定并替换为子区域的处理程序。所有这一切的原因是子区域是动态放置在区域中的,因此永远不会事先知道它们将是什么。哦,以防万一,这是 jQuery 1.72

所以:

<div id="region" class="ocontainer">
   <div id="subregion" class="ocontainer">
      <a>

在区域的处理上,链接绑定到click.region和一个传递'region'的函数。然后,click.region 应该是未绑定的,它是,并且 click.subregion 绑定在它的位置,并使用传递“subregion”的函数,这不会发生。

4

1 回答 1

0

第一件事是第一,bind()并且unbind()是不推荐使用的功能。使用.on()and.off()代替。

这是一个也有一些改进的例子。

$('div.ocontainer').each(function() {
    var o = $(this);
    var newCode = o.attr('id'); //Use cached version instead
    if (o.parents('.ocontainer').length != 0) {
        var oldCode = o.parents('.ocontainer').attr('id');
        console.log('unbinding '+oldCode);
        $('#'+oldCode+' a').each(function() {
            o.off('click', "#"+oldCode); //Turn off the event handler
        })
    }
    console.log('binding click.'+newCode);
    $('#'+newCode+' a').each(function() {
        $(this).on('click', "#" + newCode, function() {
            decideStMethod(newCode);
        })
    })
})
于 2012-10-02T14:56:34.780 回答