2009-11-10 11 views
11

Quindi ho il seguente codice che sta facendo un setInterval fino a quando l'iframe è disponibile per la scrittura.modo migliore per creare iframe dinamici in jQuery?

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

Fondamentalmente ciò che accade è che jQuery crea l'elemento iframe e lo carica nel DOM. Tuttavia, l'iframe non è disponibile immediatamente così ulteriori chiamate jQuery che sono codificate per accadere subito dopo. Con questo pezzo di codice, esegue un semplice controllo dell'intervallo fino a quando il nuovo iframe è disponibile, quindi scrive "asd" sul suo contenuto.

Ho passato circa un'ora a provare diversi metodi di concatenamento dei metodi per la creazione di iframe, ma nulla funziona davvero. Sembra tutto una questione di tempismo. Ho provato $ ('# testiframe'). Live ('load', function() {}); e questo non funziona affatto.

Così qualcuno ha una raccomandazione più pulita su questo?

+0

correlati: http://stackoverflow.com/questions/205087/jquery-ready-in-a-dynamically-inserted-iframe – artlung

risposta

26

Forse solo un evento regolare senza live?

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

Questo è eccellente. Non mi era venuto in mente di assegnare l'evento * prima * allegandolo all'elemento #testdiv. In retrospettiva, avrei dovuto pensarci perché ho confermato separatamente che si poteva associare l'evento load all'iframe senza che fosse collegato, alias: $ $ ('load', function() {alert ('asd');}); Gracias! – Geuis

+4

Non hai bisogno dell'ID. Perché non solo $ (this) .contents(). Find ('body'). Append ('asd'); o anche $ (this.contentDocument.body) .append ('asd') – mhenry1384

Problemi correlati