假设有一堆这样的事件处理程序:
$('.foo').on('bar.foo', function(e) {...})
仅针对bar.foo
事件调用它们。不幸的是,他们也被称为bar
事件,由我不知道的外部插件和库触发。
最简单的方法是:
$('.foo').on('bar.foo', function(e) {
if (!e.namespace) return
...
})
但问题是有很多事件处理程序。当仅bar.foo
被触发时,还有其他可能阻止调用bar
的事件处理程序吗?
编辑:在这种情况下,重命名bar
事件不是解决方案。
答案 0 :(得分:0)
flec指出jQuery的行为(参见评论):
在您的情况下,此行为似乎无用,但在大多数情况下,这是预期的行为。例如。如果你想要一个你想要删除的点击处理程序,但保持其他处理程序不变。
所以我似乎必须使用上面if (!e.namespace) return
的方法。 jQuery在这一点上很糟糕。
答案 1 :(得分:0)
事件命名空间主要用作帮助程序,以轻松取消绑定特定的匿名回调。
$( body ).on( 'click', function() {
console.log( 'Default click on body' );
});
$( body ).on( 'click.myCustomPluginNamespace', function() {
console.log( 'Custom plugin click on body' );
});
// On plugin cleanup, to leave the default binding intact.
$( body ).off( 'click.myCustomPluginNamespace' );
如果没有它,您需要保存对自定义侦听器函数的引用,即: