2009-11-10 11 views
11

Así que tengo el siguiente código que está haciendo un setInterval hasta que el iframe esté disponible para ser escrito.mejor forma de crear iframes dinámicos en jQuery?

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

Básicamente lo que sucede es que jQuery crea el elemento iframe y lo carga en el DOM. Sin embargo, el iframe no está disponible inmediatamente, por lo que las llamadas jQuery adicionales codificadas para que ocurran después de las palabras correctas. Con este trozo de código, realiza una simple comprobación de intervalo hasta que el nuevo iframe esté disponible, luego escribe 'asd' en su contenido.

He pasado aproximadamente una hora probando diferentes métodos de encadenar métodos para la creación de iframe, pero nada funciona realmente. Todo parece una cuestión de tiempo. Intenté $ ('# testiframe'). Live ('load', function() {}); y eso no funciona en absoluto.

Entonces, ¿alguien tiene una recomendación más clara sobre esto?

+0

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

Respuesta

26

¿Tal vez solo un evento normal sin live?

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

Este es excelente. No se me había ocurrido asignar el evento * antes * adjuntarlo al elemento #testdiv. En retrospectiva, debería haberlo pensado porque confirmé por separado que puedes vincular el evento de carga al iframe sin que esté conectado, también conocido como: $ ('