Прикрепить событие в дочернем iframe к обработчику в родительском окне
У меня нет прямого доступа к источнику этого iframe, поэтому я хотел бы сделать это, если это возможно.
У меня есть iframe, сгенерированный JS:
<iframe name="temp_iframe" width="100%" height="95%" src="'+the_url+'"></iframe>
А внутри находится кнопка отправки и кнопка отмены. Кнопка отправки работает нормально, но я хочу, чтобы кнопка отмены закрывала этот модал, содержащий iframe... Я также хочу отправить кнопку отправки, а затем закрыть модал. Обычно это было бы легко, но я не уверен, как настроить событие в родительском окне для дочернего элемента DOM iframe, который влияет на родительский дочерний элемент, главное окно.
Например, если это не было в iframe и в jQuery:
$('[name=temp_iframe] button').live('click',function(){
alert('click');
return false;
});
РЕДАКТИРОВАТЬ: И также, это в том же домене!
2 ответа
Использование contents()
для доступа к объекту Document внутри iframe. Обратите внимание, что в целом существуют проблемы с использованием библиотеки jQuery в одном документе для манипулирования другим документом, и в целом этого следует избегать. Однако в случае обязательных событий это работает.
$('[name=temp_iframe]').contents().find('button').click(function() {
alert('click');
});
Для этого требуется, чтобы iframe и его содержимое были загружены, поэтому сделайте это в $(window).load()
обработчик при необходимости. Ты не можешь live
/delegate
между документами, поскольку события не распространяются из дочернего документа в его родительский.
В простом JavaScript это будет:
document.getElementById("frameId").contentDocument.getElementById("buttonId").click();
Если вам нужно искать элементы по значению атрибута и имени тега, вы можете:
document.querySelectorAll('[name=temp_iframe]')[0].contentDocument.getElementsByTagName('button')[0].click();