我正在使用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,所以我可能会删除比所需更多的处理程序...
如果这是正确的,我不明白(不知道)如何使用命名空间附加处理程序。
答案 0 :(得分:6)
事件命名空间是捆绑一组相关事件的基本方法 - 例如,您可能希望在创建插件时使用命名空间,即:
$(document).bind('show.myplugin', function() {...});
$(document).bind('hide.myplugin', function() {...});
所以稍后,也许在破坏/拆解时你可以做以下事情:
$(document).unbind('.myplugin');
您所定义的所有绑定都将被删除(无法单独删除每个绑定)。
在您的情况下,这将允许您删除特定命名空间的事件,而不删除命名空间之外的$.proxy()
回调函数定义的其他绑定的事件。
答案 1 :(得分:1)