jQuery «события» - это ноль или не объект », при использовании empty () или html () - PullRequest
3 голосов
/ 04 декабря 2010

Я получаю следующую ошибку в IE:

'события' не заданы или не являются объектом - jquery-latest.js? D = 1848173663, строка 113, символ 467

Я использую jQuery 1.4.2, я пока не могу обновиться, так как мы находимся на более старой версии пользовательского интерфейса jQuery и у меня слишком много ошибок при использовании чего-то более нового, чем 1.4.2.

Я получаю следующую ошибку, когда запускаю этот бит кода во второй раз :

$.post("page/view.do?undoCache=" + Math.random(), {
   pageId: pId
}, function(xmlContent){
   console.log('1');//get this one
   $('#reloadCenterDiv').empty();
   console.log('2');//don't get this one unless line above is commented out, then will run til next line
   $('#reloadCenterDiv').html(xmlContent);
   console.log('3');//don't get this
});

Я почти уверен, что ничего не делаю для #reloadCenterDiv между вызовами.

Погуглил на предмет ошибки "события" являются нулевыми или не объектами "Я нашел это:

" Похоже, что ссылка на обработчик событий все еще существует, когдасам обработчик уже ушел. "

Звучит логично.Любые другие идеи о том, почему и когда возникнет эта ошибка?

Я нашел, где это происходит, но все подсказки для меня на этом заканчиваются.

Как мне почистить вещи, чтобы я мог позвонитьempty () или html () снова в #reloadCenterDiv?

Вот HTML-код для #reloadCenterDiv:

<div id="reloadCenterDiv" style="border:none; margin: 0; overflow:auto; overflow-y:scroll; height: auto;"></div>

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Не уверен, но может показаться, что 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.

0 голосов
/ 17 февраля 2011

Если вы не можете обновить свой jQuery, вы можете вместо этого установить HTML:

$("#divid").html("");

По сути, это то же самое.

...