2010-10-14 100 views
2

首先,父页面和iframe托管在同一台服务器上(我的本地主机上的WAMP),所以同一个来源策略在这里不应该是个问题。如何将事件绑定到本地iframe中的元素?

我不能触发器工作。我的iframe的ID为iframe

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

我做错了什么?

+1

缺少单引号'''并且缺少分号是错别字?除此之外,它对我来说看起来很不错。 – jAndy 2010-10-14 14:58:58

+1

你确定iframe内容已经加载之前的JavaScript执行?请记住,父页面可以在加载iframe页面之前调用is_loaded。 – 2010-10-14 15:00:28

+0

我应该如何调用is_loaded()的任何链接/代码?谢谢 – Haroldo 2010-10-14 15:34:33

回答

7

我不确定浏览器是否会将的窗口上下文中的“click”事件传播到包含窗口。加载到的文档是否有其自己的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 2010-10-14 15:34:11

+0

不管怎样,我错了 - 正如jAndy在他的评论中所说的那样,这对我来说似乎工作得很好。 – Pointy 2010-10-14 15:37:26

+0

$('#iframe')。load() - 完美,谢谢Pointy! – Haroldo 2010-10-14 15:44:27

0

你的代码没有错;我认为你所做的唯一的错误是你要求在父页面加载iframe的内容,这意味着在这个阶段iframe尚未加载。

试试我的快速示例http://jsfiddle.net/UFM44/4/ 它与您的代码相同,但在点击“now”链接后触发它。如果你点击标识,你可以看到alert()信息。

+0

感谢Mouhannad,绝对看着正确的方向 – Haroldo 2010-10-14 15:43:38

相关问题