Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery如何创建它';s自定义事件,我可以用Javascript重新创建吗?_Javascript_Jquery_Android Browser_Custom Events - Fatal编程技术网

JQuery如何创建它';s自定义事件,我可以用Javascript重新创建吗?

JQuery如何创建它';s自定义事件,我可以用Javascript重新创建吗?,javascript,jquery,android-browser,custom-events,Javascript,Jquery,Android Browser,Custom Events,我希望使用与JQuery相同的方法在Javascript中创建事件——有人知道JQuery是如何做到的吗 我的理由是,使用原始Javascript时: var myEvent = new CustomEvent("userLogin", eventProperties); …实际上不适用于Android本机浏览器,因为它不像Chrome和其他浏览器那样支持DOM级别3 然而,JQuery在Android的股票浏览器上工作,并且只使用: $.event.trigger('MyEvent');

我希望使用与JQuery相同的方法在Javascript中创建事件——有人知道JQuery是如何做到的吗

我的理由是,使用原始Javascript时:

var myEvent = new CustomEvent("userLogin", eventProperties);
…实际上不适用于Android本机浏览器,因为它不像Chrome和其他浏览器那样支持DOM级别3

然而,JQuery在Android的股票浏览器上工作,并且只使用:

$.event.trigger('MyEvent');

我的问题是,这背后的代码是什么?我试图通过JQuery找到它,但是我的脑袋绕不过去

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

(你也许可以看到我要用这个…)

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

从第4464行开始,你可以看到它的辉煌


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

jQuery是否也会向具有侦听器的元素添加一个额外的属性,以便为元素添加自己的唯一标识符?@RobG:是的,它会:与元素关联的jQuery事件处理程序存储在
data
函数管理的同一个数据缓存中,jQuery第一次初始化元素的数据缓存时,会将jQuery expando属性添加到元素对象(
jQuery11008836618564091623
或类似内容)。该属性的值是它用来在数据缓存中查找信息(包括事件处理程序)的键。感谢Crowder的解释-我没有意识到JQuery是这样做的。我想我只需要包含JQuery并保存自己的重写功能就可以做到这一点,因为在这个实例中不值得花费时间。再次感谢。@OliC:不用担心,很高兴这有帮助。