2012-06-08 9 views
5

Ich habe Code wie diese, mit jQuery-svgSVG-Onload-Ereignis zu früh aufgerufen?

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

Der Event-Handler, bind, bevor jQuery-svg-dom abgefeuert wird der Lage ist, Elemente innerhalb der SVG-Daten auszuwählen. Mein Code soll über das SVG schauen und verschiedene Klassen zuweisen und Listener an verschiedene Elemente anhängen, aber es kann keine finden. Wenn ich in der Konsole bind rufe, nachdem alles geladen ist, kann es alle SVG-Elemente finden.

Mache ich etwas falsch? Gibt es eine andere Möglichkeit zu erkennen, wann das SVG-DOM verfügbar ist? Ich habe über einen Timer nachgedacht, aber das ist wirklich hacky, besonders wenn man bedenkt, dass meine SVG-Dateien einige MB groß sein könnten.

Antwort

0

Haben Sie versucht, einen Timer mit einer Zeitverzögerung von "0" oder vielleicht nur "10" zu verwenden? Ich habe diese Technik häufig verwendet, um die Arbeit aus der aktuellen Laufschleife herauszuholen, da Timer nach dem Abschluss der Neuzeichnung beendet werden. Mit etwas Glück wird die Bindung erst ausgelöst, wenn das Repaint fertig ist. Ich bin nicht sicher, ob dies in Ihrem speziellen Fall helfen wird, weil ich nicht weiß, was Sie sonst auf der Seite tun - es wird nicht helfen, zum Beispiel, wenn Sie eine asynchrone Datenbehandlung haben.

+1

Die Seite lädt die SVG-Daten asynchron, ja. Ich habe eine Schleife verwendet, um zu prüfen, ob der Inhalt alle 50ms oder so fertig ist (jetzt vergessen). –

Verwandte Themen