gassmonkey
@gassmonkey
Провокатор

Почему при подгрузке html через .load() отваливаются js скрипты?

Некоторые разделы на сайте подгружаются через .load() из других страниц таким образом:
$(".nav-load").click(function () {
   $('.load-block').load('contact.html .load-block');
    return false;
});

При этом отваливаются js скрипты, работающие в этих блоках.
Как это исправить?
  • Вопрос задан
  • 468 просмотров
Пригласить эксперта
Ответы на вопрос 4
teotlu
@teotlu
Навёрстываю упущенное
Вы имеете в виду, что отваливаются обработчики событий (click, change и т.д.)?
Скажем, для ссылки .my-link внутри подгружаемого блока у вас назначен обработчик clickHandler.
Просто пользуйтесь делегированием, пишите не так:
$('.my-link').click(clickHandler);
А вот так:
$(document).on('click', '.my-link', clickHandler);
Ответ написан
prodavecmacdonalds
@prodavecmacdonalds
коммуницирую
подгружай их перед остальными скриптами

<script>
$(".nav-load").click(function () {
   $('.load-block').load('contact.html .load-block');
    return false;
});
</script>
<link rel="javascript" type="text/javascript" href="scripts.js">
Ответ написан
@targrik
Инициализацию обработчиков надо вынести в отдельную функцию, и вызывать её при каждой догрузке контента. Чтобы не инициализировать обработчики по нескольку раз на тех же элементах, внутри функции следует работать с элементами только в текущем контейнере.

$(function() {
	prepare_container($('body'));
});
function prepare_container(c) {
	// инициализация обработчиков для элементов внутри контейнера
	// ...
	c.find(".nav-load").on('click', function () {
		var block = $('.load-block');
		block.load('contact.html .load-block', function() {
			prepare_container(block);
		});
		return false;
	});
}
Ответ написан
Комментировать
@coderlex
Либо крепить обработчики live-методом, т.е. к parent тэгам, либо инициализировать их заново для определенного контекста
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы