2012-06-08 38 views
5

我有這樣的代碼,使用jQuery的SVGSVG onload事件過早調用?

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

事件處理程序,bind,jQuery的SVG-DOM之前解僱能夠選擇SVG數據中的元素。我的代碼應該查看SVG並分配各種類並將偵聽器連接到各種元素,但無法找到任何元素。如果我在調用控制檯後調用bind,它可以找到所有SVG元素。

我做錯了什麼?有沒有另一種方法來檢測SVG DOM何時可用?我想過使用計時器,但這真的很不方便,特別是考慮到我的SVG文件可能只有幾MB。

回答

0

您是否嘗試過使用定時器延遲'0'或者可能只是'10'?我經常使用這種技術將工作推出當前運行循環,因爲定時器在重繪完成後觸發。幸運的是,綁定只會在重新繪製完成後纔會被觸發。我不確定這是否會對您的特定實例有所幫助,因爲我不知道您在頁面中做了些什麼 - 例如,如果您有一些異步數據處理正在進行,這無濟於事。

+1

頁面正在異步加載SVG數據,是的。我最終使用一個循環來檢查每50ms內容是否準備就緒(現在忘記了)。 –