Обработка событий от документа в 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 ифрейма, страница перестаёт реагировать на клики. Там всё те же элементы, с теми же атрибутами, которые должны ловиться и обрабатываться скриптом(и обрабатываются при первоначальной загрузке). |
Важный момент: в 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 успешно навешивается на элемент, при клике по нему выводится алерт. Но после смены страницы обработчик перестаёт реагировать. |
http://javascript.ru/tutorial/events...s#tip-sobytiya
вставь в контейнер и отлавливай события в нём |
Спасибо, работает! Само явление мне до сих пор не совсем понятно. Почему обработчики событий установленные до смены src ифрейма ловили события, а после смены src уже нет? Не всё ли равно, откуда взялся кусок html-я, присвоенный innerHTML?
|
Часовой пояс GMT +3, время: 21:12. |