2011-09-13 52 views
2

下面的代碼:HTML 5畫布的getElementById()返回null /未定義

HTML:

<body onload="initializeMap()"> 
    <div id="map_canvas" style="width:100%; height:100%; z-index:1"></div> 
    <canvas id="control" style="width:100%; height:100%; z-index:2">Does Not Support Canvas Element</canvas> 
</body> 

的Javascript:

<script type="text/javascript"> 
    var canvas = document.getElementById('control'); 
    var context = canvas.getContext('2d'); 

    function draw(){ 
     context.font = "bold 12px sans-serif"; 
     context.fillText("x", 248, 43); 
    } 
</script> 

繪製函數是谷歌地圖的初始化之後調用所以DOM應該已經加載了,那麼正確嗎?我可能做錯了什麼?

回答

3

當調用draw函數時,DOM已經被加載,這是正確的。

var canvas = document.getElementById('control'); -line在此之前被評估,因爲它不在draw-函數中。它在元素渲染前的文檔<head>中立即執行。

我建議你改變你的初始化函數類似的東西

​​
3

如果您的javascript在您的body之前加載,則畫布將爲undefined,因爲瀏覽器尚未加載/呈現它。

+0

這是對標籤,但該函數被調用。它不應該正常工作嗎?任何例子? – Bahamut

+0

我沒有看到一個函數,我設置了一個變量設置器var canvas = doucment.get ...('control');'當瀏覽器在頭部運行javascript時沒有文檔。 –

+0

JavaScript在上聲明,但函數draw()在文檔加載後調用,這很好。 – Bahamut