2010-10-14 8 views
2

Во-первых, как родительская страница, так и iframe размещаются на одном сервере (мой локальный хост на WAMP), поэтому такая же политика происхождения не должна быть проблемой.Как связать событие с элементом внутри локального iframe?

Я не могу заставить спусковой крючок работать. У моего iframe есть идентификатор iframe.

$(window).load(function(){ 
    //iframe ad hovers 
    $('#iframe').contents().find('body div').click(function(){ 
    alert('do something here'); 
    }); 
}); 

что я делаю неправильно?

+1

отсутствует одиночная цитата '' 'и отсутствует точка с запятой опечатки? Кроме того, это выглядит очень хорошо для меня. – jAndy

+1

Вы уверены, что содержимое iframe загрузилось до выполнения javascript? Помните, что родительская страница может вызывать is_loaded до загрузки страницы iframe. –

+0

любые ссылки/код для того, как я должен назвать is_loaded()? спасибо – Haroldo

ответ

7

Я не уверен, что браузер будет распространять событие «щелчок» из контекста окна в содержащее окно. Имеет ли документ, загруженный в , свою копию jQuery? Если да, то вы можете попробовать это:

$('#iframe').contents().$.find('body div').click(function(){ 
    alert('do something here); 
}); 

Это изменение делает код JQuery в окне обрабатывать событие.

Ну, я думаю, что @jAndy правильно и что должно работать как есть - но вы должны убедиться, что документ в кадре загружается. Попробуйте следующее:

$('#iframe').load(function() { 
    $(this).contents().find('body div').click(function() { alert("hi"); }); 
}); 
+0

Хмм не может полагаться на jquery, находясь на странице iframe'd, к сожалению. – Haroldo

+0

Ну, я в любом случае ошибаюсь - как сказал в своем комментарии jAndy, который, похоже, работает для меня отлично. – Pointy

+0

$ ('# iframe'). Load() - отлично, спасибо Pointy! – Haroldo

0

Ваш код не является ошибочным; Я думаю, что единственная ошибка, которую вы делаете, заключается в том, что вы запрашиваете контент iframe на загрузке родительской страницы, что означает, что на этом этапе iframe еще не загружен.

Попробуйте мой быстрый пример http://jsfiddle.net/UFM44/4/ Это то же самое, что и ваш код, но я вызываю его после нажатия на ссылку «сейчас». если вы нажмете на логотип, вы увидите сообщение alert().

+0

Спасибо Mouhannad, определенно глядя в правильном направлении – Haroldo

Смежные вопросы