jQuery onload – .load() – 事件不能与动态加载的iframe一起使用

我的脚本在用户单击按钮时加载iframe。 我想在iframe加载后调用另一个函数,但它不起作用。 iframe确实正常加载,但iframe完成加载后永远不会调用.load()事件。 iframe包含来自同一网站的内容(无外部内容)。 奇怪的是,我在我的代码中的其他几个点使用了下面描述的相同技术,它运行得很好。 谁能建议我接下来应该检查什么?

这是相关的代码:

$('#myIframe').load(function () { alert('iframe loaded'); }); $('#someButton').live('click', function () { $('body').append($('')); }); 

看起来有点类似于这里的问题:

jQuery .ready在动态插入的iframe中

这样,Iframe元素存在于附加的Dom中。 只有当您设置了Url才会加载,此时您已经附加了要在末尾标记的加载函数。 所以对你的代码

 $('#someButton').live('click', function () { $('body').append($('')); $('#myIframe').attr('src',"https://www.mywebsite.com"); $('#myIframe').load(function () { alert('iframe loaded'); }); }); 

您的代码示例不起作用的原因是您绑定到一个不存在的元素,然后在没有事件处理程序附加到load事件时将该元素放入DOM中。 试试这个:

 $('#someButton').live('click', function () { var $iframe = $('').load(function () { alert('iframe loaded'); }).attr('src', 'https://www.mywebsite.com'); $('body').append($iframe); }); 

或者更接近您的原始代码,您可以用.live('load')替换.load() .live('load')

 $('#myIframe').live('load', function () { alert('iframe loaded'); }); $('#someButton').live('click', function () { $('body').append('');//notice I removed the $() around the append code as it is unnecessary }); 

试试这个:

 $("").appendTo("body") .attr('src', url) .load(function() { callback(this); }); 

刚添加了一些链接,创建了选择器通常所在的元素(这是可能的),并将其附加到正文。

如果您在iframe中加载的文档是您控制的内容,请尝试将加载处理程序放入该文档中。 如果您需要父文档在iframe加载后执行某些操作,则可以从子项中调用父项中的函数:

 // in parent doc function myIframeLoaded() { // do something } // in iframe doc $(document).load(function() { // or .ready() parent.myIframeLoaded(); }