Как правильно получить доступ к событиям при использовании jQuery.extend () - PullRequest
3 голосов
/ 21 апреля 2011

Я добавляю события в расширенный объект в jQuery, используя jQuery.extend();

Используя jQuery 1.4.4, я обращался к атрибуту с именем __events__, и я мог получить доступ к нему предсказуемым образом, чтобы добавить свои собственные обработчики событий.

После проверки объектов jQuery 1.5.1 я заметил создание случайного атрибута на объекте при использовании функции extends.

Атрибут имеет следующий формат: jquery151****************** (где * - числа, сгенерированные случайным образом).

Теперь я заблокирован, потому что мне нужно найти способ получить доступ к той же переменной, но поскольку имя случайное, мне нужен способ динамического доступа к нему.

Предоставляет ли jQuery способ сделать это? Если нет, то как мне лучше всего добавить перехватчики событий?

1 Ответ

7 голосов
/ 21 апреля 2011

Числа не так случайны, как кажутся, это свойство растяжения, оно доступно через jquery.expando или $.expando. Числа представляют собой временную метку (Date().getTime()) с момента загрузки страницы, чтобы не конфликтовать ни с какими другими атрибутами.

Например, во время ответа на этой странице:

$.expando === "jQuery151023621073900721967"

Однако это более чистые способы сделать то, что вы делаете, например, коллекции events доступны через .data(), например:

var events = $("mySelector").data("events");

.data(), .bind() и т. Д. Все используют этот атрибут внутренне, это просто ключ к тому, где элемент имеет данные в объекте $.cache , значение этого атрибута является ключом в $.cache. Например, чтобы получить все данные, события и т. Д. Для элемента, он должен выглядеть следующим образом в необработанном виде:

var data = $.cache[element[$.expando]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...