2012-06-08 5 views
5

je code comme ceci, en utilisant jQuery-svgÉvénement SVG onload appelé trop tôt?

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) 
} 

Le gestionnaire d'événements, bind, est déclenché avant jQuery-svg-dom est en mesure de sélectionner des éléments dans les données SVG. Mon code est censé regarder par-dessus le SVG et assigner différentes classes et attacher des écouteurs à divers éléments, mais il n'est pas capable d'en trouver. Si j'appelle le bind dans la console après que tout soit chargé, il peut trouver tous les éléments SVG.

Est-ce que je fais quelque chose de mal? Existe-t-il un autre moyen de détecter quand le DOM SVG est disponible? J'ai pensé à utiliser une minuterie, mais c'est vraiment bizarre, d'autant plus que mes fichiers SVG pourraient être de quelques Mo de large.

Répondre

0

Avez-vous essayé d'utiliser une minuterie avec un délai de minuterie de '0' ou peut-être juste '10'? J'ai souvent utilisé cette technique pour pousser le travail hors de la boucle d'exécution en cours car les minuteries sont déclenchées après la fin du ghasse. Avec de la chance, la liaison ne sera déclenchée qu'une fois le repaint terminé. Je ne suis pas sûr si cela aidera dans votre cas particulier parce que je ne sais pas ce que vous faites d'autre dans la page - cela n'aidera pas, par exemple, si vous avez un traitement de données asynchrone en cours.

+1

La page charge les données SVG de manière asynchrone, oui. J'ai fini par utiliser une boucle pour vérifier si le contenu est prêt toutes les 50ms ou quelque chose (oublié maintenant). –

Questions connexes