2011-11-24 67 views
0

我有一個非常基本的代碼來加載Bing地圖。通過將這些代碼放置在HTML的頭部,它會將地圖加載到div #map中。JavaScript代碼將不會執行

這將很好地工作:

<script type="text/javascript"> 
     window.onload = GetMap;    
     function GetMap() 
     { 
      map = new VEMap('map'); 
      map.LoadMap();    
     } 
     </script> 

正如上面的代碼只需加載功能的GetMap。所以不應該不使用函數的函數內的代碼工作?例如:

<script type="text/javascript"> 
      map = new VEMap('map'); 
      map.LoadMap(); 
     </script> 

但爲什麼這不起作用?

+0

因爲你的窗口加載之前加載它;將它包裝在window.onload = function(){//你的代碼在這裏};它會工作。 – fardjad

回答

1

如果將它放在頭部分中,它將在整個頁面呈現之前執行並創建「map」div。這會在嘗試更改div內容時導致錯誤。

通過在函數中包裝它並在窗口加載中調用該函數,確保代碼僅在頁面完全呈現後才能執行。

或者,您可以將您的代碼放在div後面,然後它應該可以工作。

1

我假設Bing地圖綁定到DOM元素來顯示地圖(就像Google地圖一樣)。如果這是DOM元素必須首先被瀏覽器加載才能使綁定起作用的情況。在window.load上加載它可以確保發生這種情況。如果您將代碼移動到頁面底部,並且位於body標籤上方,我相信您的代碼應該可以正常工作。

1

它不起作用,因爲地圖元素不會在當你調用DOM存在

map = new VEMap('map'); 

窗口onload事件觸發在文件加載過程結束 - 所以文檔中的所有對象在DOM中。

1

長話短說: 如果你不喜歡的功能(他們怎麼做的嗎?!),把那第二個腳本在body元素的底部