2012-06-08 9 views
5

Ho codice in questo modo, utilizzando jQuery-svgEvento onload SVG chiamato troppo presto?

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

Il gestore di eventi, bind, viene generato prima jQuery-svg-dom è in grado di selezionare gli elementi all'interno dei dati SVG. Il mio codice dovrebbe guardare sopra l'SVG e assegnare varie classi e collegare gli ascoltatori a vari elementi, ma non è in grado di trovarne. Se chiamo bind nella console dopo che tutto è stato caricato, può trovare tutti gli elementi SVG.

Sto facendo qualcosa di sbagliato? C'è un altro modo per rilevare quando il DOM SVG è disponibile? Ho pensato di usare un timer, ma questo è veramente hacky, specialmente considerando che i miei file SVG potrebbero avere dimensioni di qualche MB.

risposta

0

Hai provato a utilizzare un timer con un ritardo del timer di "0" o forse solo "10"? Ho spesso usato questa tecnica per far uscire il lavoro dal ciclo di esecuzione corrente mentre i timer vengono attivati ​​dopo il redraw ghas completato. Con un po 'di fortuna il legamento sarà sparato solo una volta che il repaint sarà finito. Non sono sicuro se ciò sarà d'aiuto nella tua particolare istanza perché non so cos'altro si sta facendo nella pagina - non sarà di aiuto, ad esempio, se si sta verificando una gestione asincrona dei dati.

+1

La pagina sta caricando i dati SVG in modo asincrono, sì. Ho finito per utilizzare un ciclo per verificare se il contenuto è pronto ogni 50 ms o qualcosa (dimenticato ora). –