jQuery, потеря связей

программирование JavaScript jQuery

Помогите разобраться.

Есть
div id="layer"

В нем находится контент, например кнопка id="btn"

Вешаем событие на кнопку, к примеру
$('#layer').on('click', '#btn', function() {
alert('click');
});

Теперь отправляем содержимое layer в кэш:

var cache = $('#layer').html();

Чистим содержимое layer
$('#layer').empty();

Теперь бросаем новый контент в layer, выполняем над ним различные действия.
Но вот нам понадобилось восстановить кэш:

$('#layer').html( cache );

Но вот незадача, событие click не срабатывает.

Растолкуйте, что происходит и как решить проблему?
Каждый раз при очистке layer, связи рвутся и нужно вешать события заново (после восстановления кэша)? Или события сохраняются и постепенно захламляют память?






Примечание:
С обработчиками все ясно, но снова проблема, при клонировании / копировании теряются ссылки через переменные:

var $box = $('#layer').find('div.box');

$box.html('--test--');

// ...
// Дальнейшие манипуляции, очистка слоя и восстановления содержимого слоя через кэш.
// ...

Теперь
$box.html('--test2--');
не срабатывает.

Помогите с этой проблемой.
Ответы:
.html() - сохраняет только текущий html
$('#layer').html( cache ) - только присваивает html
все события надо перепривязывать.
Еще есть live.
Синтаксис:
$(selector).live('click',function(){
...
});
Обработчик будет работать независимо от изменений, если существует элемент, соответствующий селектору.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.