Изменяет ли jQuery целевой элемент при создании обработчика событий? - PullRequest
1 голос
/ 09 сентября 2011

Например:

$("myElement").click(function(){
alert("Clicked!");
};

Был ли изменен #myElement, установлен атрибут onclick или jQuery просто установил прослушиватель?

Ответы [ 4 ]

3 голосов
/ 09 сентября 2011

Функция click() не изменяет любые атрибуты DOM.

Добавляет прослушиватель для этого конкретного элемента jQuery.

То же самое относится к .change(), .keyup(), ... и так далее.

0 голосов
/ 09 сентября 2011

Рассматривая источник jQuery 1.6.2:

$("myElement").click(...) calls: $("myElement").bind('click', ...) 
which then calls: jQuery.event.add(...) 
which ultimately does either elem.addEventListener(...) or elem.attachEvent(...)

Итак, мы можем окончательно сказать, что он не устанавливает атрибут onclick (как и следовало ожидать, поскольку addEventListener более расширяем).

НО, когда я иду глубоко через функцию .click (), атрибут добавляется к объекту DOM.Он связан с функцией данных jQuery и находится в этом фрагменте кода в функции данных jQuery, которая вызывается из event.add(...).Похоже, это какой-то идентификатор guid, который jQuery использует для отслеживания того, какой объект есть, без сохранения ссылки на DOM (что может привести к утечкам памяти).Код, который добавляет этот атрибут, находится здесь:

   if ( !id ) {
        // Only DOM nodes need a new unique ID for each element since their data
        // ends up in the global cache
        if ( isNode ) {
            elem[ jQuery.expando ] = id = ++jQuery.uuid;
        } else {
            id = jQuery.expando;
        }
    }

Итак, в заключение, jQuery не затрагивает атрибут .onclick, но при установке первого объекта он устанавливает по крайней мере еще один атрибут для объекта DOM.обработчик событий.

0 голосов
/ 09 сентября 2011

Он не изменяет элемент.

jQuery () - который также можно записать как $ () - ищет в DOM любые элементы, соответствующие предоставленному селектору, и создает новый jQueryобъект, который ссылается на эти элементы

0 голосов
/ 09 сентября 2011

jQuery устанавливает слушателя, если используется .click();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...