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