首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery中的全局自定义事件

jQuery中的全局自定义事件
EN

Stack Overflow用户
提问于 2010-07-19 17:25:08
回答 2查看 16.9K关注 0票数 19

我想使用独立于DOM元素的自定义jQuery事件,但我不确定实现这一点的最佳方法是什么。

这是我开始时的想法:

代码语言:javascript
复制
// some system component registers an event handler
$().bind("foo.bar", handler); // foo is my app's namespace, bar is event name
// another part of the system fires off the event
$().trigger("foo.bar", { context: "lorem ipsum" });

在研究了jQuery的源代码,特别是它对全局AJAX事件的处理之后,我认为这应该是可行的:

代码语言:javascript
复制
$.fn.bind("foo.bar", handler);
// ...
$.event.trigger("foo.bar", { context: "lorem ipsum" });

但是,我的处理程序函数似乎从未被调用过。

我是不是走错路了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-19 17:34:59

如果您使用的是jQuery >1.4,那么$()将返回一个空的jQuery集合,这意味着实际上没有任何事件处理程序绑定到任何东西。在1.4之前,它将返回与jQuery(document)相同的值。

简单地拥有一个全局名称空间(一个实际的对象),然后向其中添加事件可能会更好:

代码语言:javascript
复制
var FOO = {};

$(FOO).bind("foo.bar", handler);

$(FOO).trigger("foo.bar", { context: "lorem ipsum" });
票数 34
EN

Stack Overflow用户

发布于 2010-11-17 16:37:13

我在这里找到了我的方法,因为我希望通过使用jQuery的命名空间定制事件来实现发布者/订阅者模式。虽然公认的解决方案是以一种不绑定到DOM元素的方式使用$.event.trigger(),但它不适用于发布者/订阅者体系结构中的真正全局事件实现(例如具有许多异步操作的复杂UI ),在这种体系结构中,您希望让任意对象/元素侦听自定义事件。

通过实验,我发现非国大事件没有触发的真正答案是因为jQuery显然不允许“。自定义事件names...but下划线中的(句号)字符似乎没有问题。

因此,如果您将事件命名为类似于foo_bar (而不是foo.bar)的名称,那么您的代码应该可以按预期工作。使用jQuery 1.4.4进行了测试。

编辑:只是为了清楚-我的意思是,如果你想使用$.event.trigger()机制,自定义事件的句号是不允许的。在事件由对象或元素触发的场景中,周期似乎是ok...not确定的,无论这是错误还是设计。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3279809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档