У меня есть javascript, который люди включают в свою страницу. В моем javascript у меня есть версия jQuery (1.8 для простой справки), которая разделяется на свое собственное пространство имен и ссылается через глобальную переменную (но не один из двух стандартных варов "$" или "jQuery" ), Это позволяет пользователям иметь jQuery на своей странице и не мешать тому, что я делаю внутренне в своих функциях.
Итак, у нас есть одна страница с jQuery уже (1.4), и все работает отлично, за исключением того, что пользователь и мой код одновременно прослушивают события "click" на элементах, а их первый - на нескольких событиях они возвращают false, jQuery останавливает распространение, и мое событие никогда не запускается. Мне нужно, чтобы мое мероприятие было первым. Пользователь ожидает, что мои функции onClick будут работать.
Теперь я знаю, что jQuery сохраняет свой собственный порядок событий внутри объекта _data(), и благодаря этому можно отпереть существующие события, привязать мое событие, а затем повторно привязать существующие события, но это применимо только к связанным объектам через этот экземпляр jQuery. Я бы предпочел не просто слепо искать объект jQuery в надежде, что конфликт был введен пользовательской версией jQuery. В конце концов, что происходит, когда пользователь связывает событие не через jQuery? Попытка манипулировать существующим объектом jQuery на странице не является хорошим решением.
Я знаю, что в зависимости от браузера они используют addEventListener/removeEventListener или attachEvent/detachEvent. Если бы я мог получить список уже добавленных событий, я мог бы перестроить их в том порядке, в котором я хотел, но я не могу понять, как это сделать. Просматривая DOM с помощью проверки хрома, я не вижу привязанного onclick (не на объекте, а не на окне или документе).
У меня самое страшное время, пытаясь выяснить, где именно JQuery связывает его прослушивание. Чтобы управлять порядком собственных событий, jQuery должен вслух прослушивать где-нибудь, а затем скрыть свои собственные функции? Если бы я мог понять, где это сделать, я мог бы получить представление о том, как обеспечить, чтобы мое событие всегда было первым. Или, может быть, есть какой-то javascript API, который мне не удалось найти в google.
Любые предложения?