jQuery中的全局自定义事件

AnC*_*AnC 18 javascript jquery event-handling

我想使用独立于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" });
Run Code Online (Sandbox Code Playgroud)

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

$.fn.bind("foo.bar", handler);
// ...
$.event.trigger("foo.bar", { context: "lorem ipsum" });
Run Code Online (Sandbox Code Playgroud)

但是,似乎我的处理函数永远不会被调用.

我可能会以错误的方式解决这个问题吗?

Jam*_*mes 34

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

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

var FOO = {};

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

$(FOO).trigger("foo.bar", { context: "lorem ipsum" });
Run Code Online (Sandbox Code Playgroud)

  • 要记住的一件事是,虽然我们可以将事件绑定到任何JavaScript对象,但我们无法使用`unbind`删除它们.需要使用`removeData`. (6认同)