jQuery.off()和jQuery.proxy()

时间:2012-01-03 15:54:44

标签: jquery

我正在使用jQuery 1.7中的新on() / off()方法,并阅读off()文档,我看到以下句子:

  

由jQuery.proxy()或类似机制代理的处理程序都将具有相同的唯一ID(代理函数),因此将代理处理程序传递给.off可能会删除比预期更多的处理程序。在这些情况下,最好使用命名空间附加和删除事件处理程序。

我面临的情况就是这样:

function show(){
    this.$element.on( 'click', '.close', $.proxy(this.hide, this) );
}
function hide(){
    this.$element.off( 'click', '.close', $.proxy(this.hide, this) );
}

如果我理解正确,所有对$ .proxy()的调用都有相同的uid,所以我可能会删除比所需更多的处理程序...
如果这是正确的,我不明白(不知道)如何使用命名空间附加处理程序。

2 个答案:

答案 0 :(得分:6)

事件命名空间是捆绑一组相关事件的基本方法 - 例如,您可能希望在创建插件时使用命名空间,即:

$(document).bind('show.myplugin', function() {...});
$(document).bind('hide.myplugin', function() {...});

所以稍后,也许在破坏/拆解时你可以做以下事情:

$(document).unbind('.myplugin');

您所定义的所有绑定都将被删除(无法单独删除每个绑定)。

在您的情况下,这将允许您删除特定命名空间的事件,而不删除命名空间之外的$.proxy()回调函数定义的其他绑定的事件。

答案 1 :(得分:1)

jQuery中的命名空间事件可以像这样实现:

$(el).bind('click.namespace', function(e) { ... });

See jquery documentation