2009-11-10 21 views
11

所以我有下面的代碼,它正在做一個setInterval,直到iframe可用於寫入。更好的方式在jQuery中創建動態iframes?

$('#testdiv').append($('<iframe id="testiframe"/>')); 
var t = setInterval(function(){ 
    if(document.getElementById('testiframe') !== 'undefined'){ 
     clearInterval(t); 
     $('#testiframe').contents().find('body').append('asd'); 
    } 
}, 15); 

基本上會發生的是,jQuery創建iframe元素並將其加載到DOM中。但是,iframe不可立即使用,因此額外的jQuery調用會被編碼爲正確的後綴。使用這段代碼,它會執行一次簡單的間隔檢查,直到新的iframe可用,然後將「asd」寫入其內容。

我花了大約一個小時嘗試了不同的方法鏈接到iframe創建的方法,但沒有什麼效果。這一切似乎都是時間問題。我嘗試$('#testiframe')。live('load',function(){});而這根本不起作用。

那麼有沒有人有更清潔的建議呢?

+0

相關:http://stackoverflow.com/questions/205087/jquery-ready-in-a-dynamically-inserted-iframe – artlung 2009-11-10 00:58:09

回答

26

也許只是一個普通的事件沒有live

$('<iframe id="testiframe"/>').load(function(){ 
    $('#testiframe').contents().find('body').append('asd'); 
}).appendTo("#testdiv"); 
+0

這是極好的。我沒有想到在*將它附加到#testdiv元素之前分配事件*。回想起來,我應該考慮一下,因爲我分別確認,您可以將加載事件綁定到iframe,而不將它附加,也可以: $('