Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработка событий от документа в Iframe(после смены у него src) (https://javascript.ru/forum/events/15715-obrabotka-sobytijj-ot-dokumenta-v-iframe-posle-smeny-u-nego-src.html)

re3443 10.03.2011 17:37

Обработка событий от документа в Iframe(после смены у него src)
 
Имеется невидимый iframe, с помощью которого внутри дива выводится некоторый html-документ.
При смене свойства src ифрейма(или, как вариант, location.href):
document.getElementById(ifrId).src = '/doc.jsp?page=' + n;
или
window.frames.ifrId.location.href = '/doc.jsp?page=' + n;
выводится документ с новым набором данных.

То есть, такая псевдо-аяксовая листалка.

Документ, подгружаемый в ифрейм, содержит элементы, клики на которых должны обрабатываться скриптом. Сам скрипт находится на странице, содержащей ифрейм. Так вот: при первоначальной загрузке javascript-события от этих элементов обрабатываются скриптом, а после смены src ифрейма, страница перестаёт реагировать на клики. Там всё те же элементы, с теми же атрибутами, которые должны ловиться и обрабатываться скриптом(и обрабатываются при первоначальной загрузке).

re3443 10.03.2011 18:20

Важный момент: в div документ из ифрейма вставляется через innerHTML:
if (window.frames.ifrId.document.body.innerHTML != '') {
		document.getElementById('div_id').innerHTML = window.frames.ifrId.document.body.innerHTML;
	}

Это происходит и при первой загрузке и после смены страницы. Поэтому скрипт работает со страницей не как с фреймом, а напрямую. До смены src ифрейма это удаётся, а после невозможно достучаться и как к документу в фрейме.
Например вот так:
window.onload = function() {
	var deleteAll = document.getElementById('ifrId').document.getElementById("delete_all");
	deleteAll.onclick = function() {
		alert('112');
	}	
}

При загрузке страницы обработчик click успешно навешивается на элемент, при клике по нему выводится алерт. Но после смены страницы обработчик перестаёт реагировать.

dmitriymar 10.03.2011 19:10

http://javascript.ru/tutorial/events...s#tip-sobytiya
вставь в контейнер и отлавливай события в нём

re3443 11.03.2011 11:12

Спасибо, работает! Само явление мне до сих пор не совсем понятно. Почему обработчики событий установленные до смены src ифрейма ловили события, а после смены src уже нет? Не всё ли равно, откуда взялся кусок html-я, присвоенный innerHTML?


Часовой пояс GMT +3, время: 09:20.