2008-10-15 22 views
173

Estamos utilizando jQuery thickbox para mostrar dinámicamente un iframe cuando alguien hace clic en una imagen. En este iframe, estamos usando galleria una biblioteca de JavaScript para mostrar varias imágenes.jQuery. Listo en un iframe insertado dinámicamente

El problema parece ser que $(document).ready en el iframe parece haberse activado demasiado pronto y el contenido del iframe aún no está cargado, por lo que el código galleria no se aplica correctamente en los elementos DOM. $(document).ready parece utilizar el estado listo de matriz iframe para decidir si el iframe está listo.

Si extraemos la función llamada por documento preparado en una función separada y la llamamos después de un tiempo de espera de 100   ms. Funciona, pero no podemos arriesgarnos en producción con una computadora lenta.

$(document).ready(function() { setTimeout(ApplyGalleria, 100); }); 

Mi pregunta: ¿qué evento jQuery deberíamos unen a ser capaz de ejecutar nuestro código cuando el iframe dinámica está listo y no sólo se trata de un padre?

+0

y usted confirma que las obras Galleria cuando se carga directamente en lugar de a través de un iframe, correcto? –

+0

Sí, galleria funciona perfectamente cuando lo usamos directamente en una página normal. – EtienneT

+0

posible duplicado de [javascript devuelto cuando IFRAME ha terminado de cargar?] (Http: // stackoverflow.com/questions/164085/javascript-callback-when-iframe-is-finished-loading) –

Respuesta

276

Respondí una pregunta similar (vea Javascript callback when IFRAME is finished loading?). Puede obtener control sobre el evento de carga iframe con el siguiente código:

function callIframe(url, callback) { 
    $(document.body).append('<IFRAME id="myId" ...>'); 
    $('iframe#myId').attr('src', url); 

    $('iframe#myId').load(function() { 
     callback(this); 
    }); 
} 

Al tratar con los marcos flotantes he encontrado suficientemente bueno para usar evento de carga en lugar de evento ready documento.

+16

¿No debería configurar el evento de carga antes de llamar al attr ('src')? –

+15

No, no importa. El evento de carga no se disparará hasta el siguiente ciclo de eventos como mínimo. –

+27

el evento de carga no funcionará para los iframes que se usan para descargar. como