2012-06-08 22 views
5

tengo código como este, usando jQuery-SVGEvento de carga SVG llamado demasiado temprano?

function replaceRaster(){ 
    $('#png').remove() 
    a = $('#graphic') 
    b = a.svg(a) 
    a.load('IDC_Energy.svg', 
     {onLoad:bind}) 
    svg = document.getElementById("graphic").children[0] 
    console.log(svg) 
    svg.addEventListener('load', bind) 
} 

El controlador de eventos, bind, se dispara antes de jQuery-SVG-DOM es capaz de seleccionar los elementos dentro de los datos SVG. Mi código se supone que mirar por encima de la SVG y asignar diferentes clases y adjuntar a los oyentes a diversos elementos, pero no es capaz de encontrar ninguna. Si llamo bind en la consola después de que todo está cargado puede encontrar felizmente los elementos SVG.

¿Estoy haciendo algo mal? ¿Hay alguna otra forma de detectar cuándo está disponible SVG DOM? He pensado en usar un temporizador, pero eso es realmente hacky, especialmente teniendo en cuenta que mis archivos SVG podrían tener unos MB de tamaño.

Respuesta

0

¿Ha intentado utilizar un temporizador con un retraso de temporizador '0' o tal vez sólo '10'? He usado con frecuencia esta técnica para impulsar el trabajo fuera del bucle de ejecución actual como temporizadores se dispararon después de que los ghas redibujo completado. Con suerte, el enlace solo se activará una vez que el repintado haya finalizado. No estoy seguro de si esto le ayudará en su caso particular, porque no sé qué más se están haciendo en la página - no va a ayudar, por ejemplo, si usted tiene la manipulación pasando algunos datos asíncronos.

+1

La página se está cargando los datos de forma asíncrona SVG, sí. Terminé usando un ciclo para verificar si el contenido está listo cada 50 ms o algo así (ahora lo olvidé). –

Cuestiones relacionadas