2011-11-22 144 views
10

我的脚本在用户单击按钮时加载iframe。我想在iframe加载后调用另一个函数,但它不起作用。 iframe的确可以正常加载,但是在加载iframe之后永远不会调用.load()事件。 iframe包含来自同一网站的内容(无外部内容)。奇怪的是,我在我的代码中的其他几处使用了下面描述的相同技术,并且它完美地工作。任何人都可以提出我应该检查什么?jQuery onload - .load() - 事件不适用于动态加载的iframe

下面是相关代码:

$('#myIframe').load(function() { 
    alert('iframe loaded'); 
}); 

$('#someButton').live('click', function() { 
    $('body').append($('<iframe id="myIframe" src="https://www.mywebsite.com" width="100%"></iframe>')); 
}); 

回答

10

似乎有点类同这里的问题是:

jQuery .ready in a dynamically inserted iframe

这样IFRAME元素在DOM存在与追加。只有当您设置Url时,它才会加载,您将在哪一点附加您希望在结尾标记的加载函数。 因此,对于你的代码

$('#someButton').live('click', function() { 

    $('body').append($('<iframe id="myIframe" width="100%"></iframe>')); 
    $('#myIframe').attr('src',"https://www.mywebsite.com"); 

    $('#myIframe').load(function() { 
     alert('iframe loaded'); 
    }); 

}); 
+1

我遇到了类似的Firefox错误。具体来说,如果一个新的'iframe'元素被创建并插入到DOM中,但没有指定'src'属性,则'load'事件仍然会触发。我详细介绍了我的用例,并且在任何人遇到同样的事情时都会采取措施:http://web.onassar.com/blog/2013/03/03/firefox-is-calling-the-load-event-to-soon -on-一个的iframe / – onassar

1

您的代码示例不起作用的原因是因为你被绑定到一个不存在的元素,那么该元素将到DOM时,它具有连接到load没有事件处理程序事件。试试这个:

$('#someButton').live('click', function() { 
    var $iframe = $('<iframe id="myIframe" src="" width="100%"></iframe>').load(function() { 
     alert('iframe loaded'); 
    }).attr('src', 'https://www.mywebsite.com'); 
    $('body').append($iframe); 
}); 

或接近的原始代码,可以取代​​与.live('load')

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

$('#someButton').live('click', function() { 
    $('body').append('<iframe id="myIframe" src="https://www.mywebsite.com" width="100%"></iframe>');//notice I removed the $() around the append code as it is unnecessary 
}); 
0

如果要加载在iframe的文档是可以控制的东西,尝试把负载处理程序进入该文件。如果你需要的父文档的iframe加载后做的东西,你可以调用一个函数从孩子的父母:

// in parent doc 
function myIframeLoaded() { 
    // do something 
} 

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

试试这个:

$("<iframe id='myId'></iframe>").appendTo("body") 
    .attr('src', url) 
    .load(function() 
    { 
     callback(this); 
    }); 

只是增加了一些链接,创建的元素选择通常在哪里(这是可能的),并将其附加到身体。