jQuery click () не остается после DHTML - PullRequest
1 голос
/ 25 февраля 2011

Я занимаюсь модными вещами в формате ajaxy dhtml с кешированием. После того как я загрузил ajax-страницу, представляющую интерес, я храню содержимое в массиве переменных

HistoryCache[url].load(url, handleRSX);

(эта часть отлично работает)

После этого я выполняю фиксатор ссылок:

$('a', HistoryCache[url]).click(...)

Где ... - это код, который преобразует обычную ссылку в мой вызов ajaxy.

После того, как все это сделано, мне нужно .append() моего нового контента в div, который специально создан для хранения нового материала. До добавления I .remove() все содержимое было раньше.

Проблема : Когда запрошенный URL находится в моем HistoryCache, я не .load() его и не исправляю ссылки через .click(). Я просто беру содержимое в кеш и кладу в свой держатель. На данный момент ссылки не фиксированы и фактически заменяют браузер на нужную ссылку, а не вызывают мою функцию.

Вопрос : Почему .click() не остается в массиве сохраненного кэша после того, как он был .removed() и повторно .append() ed?


Забыл упомянуть, что я решил эту проблему, изменив переопределение клика на собственный HTML-код this.onclick = function... вместо $(this).click(function(){});

1 Ответ

4 голосов
/ 25 февраля 2011

Вкл. .remove () все прикрепленные события jQuery намеренно удаляются для предотвращения утечек памяти. Если бы это не было сделано, jQuery мог бы привести к утечке памяти.

Чтобы обойти это с помощью jQuery, вы можете использовать .live () или .delegate () . Оба работают, распространяя события дальше вверх по DOM, чем связанный элемент (документ в случае live и элемент, указанный в случае делегата), и будут работать после удаления и добавления.

...