jQuery.off()和jQuery.proxy()
我正在使用jQuery 1.7中新的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)
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()
相同