2012-07-16 12 views
11

He hecho bastante para buscar una solución a este problema, pero hasta ahora no he encontrado uno que funcione en el navegador.Cómo detectar cuando innerHTML está completo

Lo que necesito es una función en javascript sin procesar que tomará un elemento y ejecutará una devolución de llamada una vez que el innerHTML se haya insertado con éxito en el dom.

p. Ej.

var element = document.getElementById('example'); 
     element.innerHTML = newhtml; 

    waitUntilReady(element, function(){ 
      //do stuff here... 
    }); 

Así que para resumir, tengo que ser capaz de comprobar el contenido del elemento y el fuego de una devolución de llamada cuando innerHtml ha completado.

Gracias de antemano por cualquier ayuda.

+1

¿Qué le hace pensar que necesita una devolución de llamada? –

+0

@am no lo soy - Consulte mi comentario a continuación en la respuesta de Kolink – gordyr

+1

¿Es esto lo que está buscando? http://james.padolsey.com/javascript/asynchronous-innerhtml/ – noj

Respuesta

5

No hay necesidad de tal función. Asignar a innerHTML lo hará inmediatamente antes de continuar ejecutando cualquier secuencia de comandos.

Si realmente necesita retrasar la ejecución (por ejemplo, para permitir que el navegador vuelva a dibujar), use setTimeout con un retraso de 1 (u otro intervalo corto).

+1

Ahh, si ese es realmente el caso, entonces genial. Pero esto todavía me deja con mi problema original. Estoy insertando dinámicamente una secuencia de comandos directamente después de anexar el html que une eventos a ciertos elementos contenidos en el nuevo html. Si bien esto funciona bien en la mayoría de los navegadores anteriores, IE 8 y versiones posteriores parecen estar devolviendo que el elemento es nulo aproximadamente el 50% del tiempo. Mi suposición era que esto se debía a que el html recién insertado no siempre estaba "listo" cuando intentaba adjuntar eventos a él. – gordyr

+0

Asegúrate de que los scripts se agreguen a la página en algún lugar después de la asignación 'innerHTML' y no hay razón para que no funcionen. –

+0

Ellos son de hecho. Sin embargo, parece tener solo una tasa de éxito del 50% en versiones anteriores de IE. Supongo que el problema debe estar en otra parte de mi código y mi suposición de que el html no está "listo" es incorrecto. – gordyr

Cuestiones relacionadas