jQuery.off()和jQuery.proxy()

jQuery.off()和jQuery.proxy(),jquery,Jquery,我正在使用jQuery 1.7中新的on()/off()方法,并阅读off()文档,我看到以下句子: 由jQuery.proxy()或类似机制代理的处理程序都将具有相同的唯一id(代理函数),因此将代理的处理程序传递给.off可能会删除比预期更多的处理程序。在这些情况下,最好使用名称空间附加和删除事件处理程序 这就是我面临的情况: function show(){ this.$element.on( 'click', '.close', $.proxy(this.hide, this)

我正在使用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,因此我可能会取消附加比所需更多的处理程序…

如果这是正确的,我不明白(不知道)如何使用名称空间附加处理程序。

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

$(document).bind('show.myplugin', function() {...});
$(document).bind('hide.myplugin', function() {...});
因此,稍后,在销毁/拆卸时,您可以执行以下操作:

$(document).unbind('.myplugin');
您定义的所有绑定都将被删除(避免您单独删除每个绑定)


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

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

$(document).bind('show.myplugin', function() {...});
$(document).bind('hide.myplugin', function() {...});
因此,稍后,在销毁/拆卸时,您可以执行以下操作:

$(document).unbind('.myplugin');
您定义的所有绑定都将被删除(避免您单独删除每个绑定)


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

jQuery中的命名空间事件可以通过以下方式实现:

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

jQuery中的命名空间事件可以通过以下方式实现:

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

“…都有相同的唯一id”
让我发笑。如果他们都有相同的id,那么id就不是唯一的。
“…都有相同的唯一id”
让我发笑。如果他们都有相同的id,那么id就不是唯一的。所以他们引用的是事件名称空间,好吗。。。我以为他们在谈论处理器名称空间。。。哎哟
on()/off()
的工作原理与jQuery 2.2.1中的
bind()/unbind()
相同,因为它们引用的是事件名称空间,好的。。。我以为他们在谈论处理器名称空间。。。哎哟
on()/off()
的工作原理与jQuery 2.2.1中的
bind()/unbind()
相同