如何避免在没有定义名称空间时调用事件处理程序
How to avoid event handler get called when no namespace is defined
假设一堆这样的事件处理程序:
$('.foo').on('bar.foo', function(e) {...})
它们仅用于bar.foo
事件调用。不幸的是,它们也被称为bar
事件,由外部插件和库触发,我不知道。
$('.foo').on('bar.foo', function(e) {
if (!e.namespace) return
...
})
但是问题是有很多事件处理程序。当只有bar
被触发时,是否有其他可能阻止bar.foo
调用这些事件处理程序?
编辑:重命名bar
事件在这种情况下不是一个解决方案。
事件名称空间主要用于帮助轻松解除特定匿名回调的绑定。
$( 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' );
如果没有这个,您需要保存对自定义侦听器函数的引用,即:
- 不是很友好的垃圾收集器,因为当侦听器未注册时,这些仍然会留在内存中。
flec指出了jQuery的行为(见注释):
在您的情况下,此行为似乎无用,但在大多数情况下,这是预期的行为。例如,如果你想有一个点击处理程序,你想稍后删除,但保留其他处理程序不变。
所以我似乎必须使用上面的if (!e.namespace) return
的方法。jQuery在这一点上很糟糕
相关文章:
- 命名空间与自调用函数
- 从html文件中的脚本标记调用非全局命名空间函数
- 调用命名空间的公共函数(coffeescript)时出现问题
- 从对象命名空间环境中的嵌套setInterval调用嵌套函数
- "堆叠外空间”;同时通过AJAX调用填充jsTree
- 从字符串调用命名空间Function
- 获取调用属于其属性或名称空间原型之一的函数的对象
- 如何使用页面加载时给出的 id 调用命名空间
- 为什么使用自定义标记创建元素会在 IE9 或 10 的 outerHTML 中添加 xml 命名空间,直到调用 .fin
- jQuery AJAX 调用以发布消息 - 错误 堆栈空间不足
- JS Jquery 命名空间调用函数
- 从一个.js文件中调用另一个.js文件中的函数时出现命名空间问题
- 将行为附加到Javascript中的命名空间调用
- 使用变量调用了Javascript命名空间
- Magento/JavaScript/Prototype:需要有关嵌套AJAX调用中命名空间的信息
- 如何在同一命名空间内从函数B调用函数A
- chrome超过最大调用堆栈大小,IE (JavaScript)超出堆栈空间
- Javascript命名空间问题,我如何在这个函数调用中获得这个值
- 从名称空间调用要在另一个javascript文件中使用的方法
- 使用名称空间调用外部文件中的函数