0

我正在寻找使用与 JQuery 相同的方法在 Javascript 中创建事件 - 有人知道 JQuery 是如何做到的吗?

我的理由是使用这样的原始Javascript:

var myEvent = new CustomEvent("userLogin", eventProperties);

...实际上不适用于 Android 原生浏览器,因为它不像 Chrome 和其他浏览器那样支持 DOM Level 3。

但是,JQuery确实可以在 Android 的股票浏览器上运行,并且只需使用:

$.event.trigger('MyEvent');

我的问题是,这背后的代码是什么?我试图通过浏览 JQuery 的源代码来找到它,但无法理解它!

4

1 回答 1

2

这里的基本内容是:当您将事件处理程序与 jQuery 挂钩时,jQuery不会直接将该处理程序添加到 DOM 元素中。相反,jQuery 在 DOM 元素上挂上了它自己的处理程序(如果它还没有处理程序的话)。当事件发生时,jQuery 查看 jQuery 注册的事件处理程序列表并按顺序触发它们。(这有几个原因;最初主要是围绕 IE 内存泄漏以及 IE 以一个顺序触发处理程序而其他所有人以不同顺序触发的事实;因此 jQuery 接管并确保了顺序。)

(你也许能看到我要去哪里......)

因此,当您使用 时trigger,jQuery 会将合成事件发送到 DOM 元素,但它并不依赖该合成事件来工作;它直接调用您通过 jQuery 注册的处理程序。事实上,它设置了一个标志,以便它知道它已经完成了,所以如果浏览器确实将事件发送到 jQuery 的处理程序,jQuery 知道忽略它(因为它已经完成了它的工作)。

从当前未压缩的 jQuery 文件的第 4,464 行开始,您可以看到它的全部荣耀。

所以基本上 jQuery 构建了自己的发布/订阅系统,并且只使用浏览器事件系统作为它的输入。所以自定义事件通常根本不需要与浏览器对话。

于 2014-08-01T14:47:41.840 回答