Как jQuery создает свои пользовательские события, и я могу воссоздать в JavaScript?

StackOverflow https://stackoverflow.com//questions/25082764

Вопрос

Я ищу создание событий в JavaScript, используя ту же методологию, что и jQuery - кто-нибудь знает, как jQuery это?

Мои рассуждения - это то, что используя RAW JavaScript такой:

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

... на самом деле не работает на родном браузере Android, так как он не поддерживает DOM уровня 3, как Chrome и другие браузеры.

Тем не менее, jQuery делает работать на андроидном браузере на складе и просто использует:

$.event.trigger('MyEvent');
.

Мой вопрос: какой код за этим?Я пытался найти его, пройдя через jQuery's Исходный код , ноне могу заставить голову вокруг него!

Это было полезно?

Решение

Фундаментальная вещь Вот это: при подключении обработчика событий вверх с jQuery, jQuery не добавляет этого обработчика в элемент DOM. Вместо этого jquery kquery крючко поднимает его на элементе DOM (если у него нет ни одного на нем). Когда событие возникает, jQuery смотрит в список зарегистрированных jQuery-обработчиков для мероприятия и пожаровал их по порядку. (Есть несколько причин этого; изначально это было в первую очередь вокруг утечек памяти и тот факт, что то есть уволенные обработчики в одном порядке, и все остальные в другом порядке; поэтому jQuery вошел и обеспечил заказ.)

(вы можете увидеть, куда я собираюсь с этим ...)

Так, когда вы используете trigger, jQuery отправляет синтетическое событие на элемент DOM, но он не зависит от этого синтетического события; Он вызывает обработчики, которые вы зарегистрированы через jQuery напрямую. На самом деле, он устанавливает флаг, чтобы он знал, что это сделано это, поэтому, если браузер делает , отправляет событие на обработчик jQuery для него, jQuery знает, что он не знает (так как он уже сделан его работа) ,

Вы можете увидеть это во всей своей славе, начиная с линии 4,464 из Текущий несжатый файл jQuery .

Таким образом, в основном jQuery's Build его собственная паба / вспомогательная система и использует только систему событий браузера в качестве ввода к нему. Так что пользовательские события обычно не должны говорить с браузером вообще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top