我想使用独立于DOM元素的自定义jQuery事件,但我不确定实现这一点的最佳方法是什么。
这是我开始时的想法:
// 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事件的处理之后,我认为这应该是可行的:
$.fn.bind("foo.bar", handler);
// ...
$.event.trigger("foo.bar", { context: "lorem ipsum" });
但是,我的处理程序函数似乎从未被调用过。
我是不是走错路了?
发布于 2010-07-19 17:34:59
如果您使用的是jQuery >1.4
,那么$()
将返回一个空的jQuery集合,这意味着实际上没有任何事件处理程序绑定到任何东西。在1.4
之前,它将返回与jQuery(document)
相同的值。
简单地拥有一个全局名称空间(一个实际的对象),然后向其中添加事件可能会更好:
var FOO = {};
$(FOO).bind("foo.bar", handler);
$(FOO).trigger("foo.bar", { context: "lorem ipsum" });
发布于 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确定的,无论这是错误还是设计。
https://stackoverflow.com/questions/3279809
复制相似问题