Не уверен, но может показаться, что jQuery.cache
перезаписывается.
Поскольку элемент DOM имеет (при необходимости) серийный номер, который отображается на jQuery.cache
, при запуске функции, подобной .empty()
, jQuery предполагает, что связанные данные существуют, ищет данные для этого элемента и удаляет их .
Вместо вашего первого журнала сделайте следующее:
console.log(jQuery.cache);
И посмотри, что это тебе даст. Держу пари, что что-то перезаписывает это. Возможно, вы загружаете jQuery дважды?
Вот пример , который намеренно удаляет jQuery.cache
. Это дает похожую ошибку.
EDIT:
Сводка комментариев ниже. В течение .empty()
(или фактически cleanData()
) jQuery извлекает экспандо из всех элементов-потомков, чтобы удалить связанные данные.
Проблема в том, что когда jQuery делает это, предполагает , что данные были успешно найдены. В этом случае каким-то образом данные отсоединяются от элемента, поэтому при извлечении данных с использованием значения expando возвращается undefined
.
Поскольку jQuery не (или не делал в 1.4.2) проверяет, что данные были найдены, его попытка получить доступ к свойству events
в данных вызывает ошибку, потому что снова data
равно undefined
.
Обновленные версии jQuery исправляют это с помощью if ( data && data.events ) {
, который проверяет наличие некоторого объекта, для которого нужно запросить его свойство events
.