2011-02-22 20 views
25

我們希望在Google文檔中包含來自Google Maps API的地圖。該文檔告訴用身體的onload()事件調用的函數來初始化地圖。通過javascript在<body>部分中添加body.onload的事件處理函數

普通的方法來調用:

<body onload="initialize_map();"> 

這並不是因爲我們使用的模板::工具包爲我們制定和<body>標籤已經包含在我們的包裝。簡而言之:當我們的javascript代碼開始運行時,<body>標記已經打印出來。

我試過這樣的事情,但它只適用於onclick,而不是onload。我想這是因爲javascript代碼位於<body>標籤本身之下。

var body = document.getElementsByTagName("body")[0]; 

body.addEventListener("load", init(), false); 

function init() { 
     alert("it works!"); 
}; 

任何幫助如何啓動谷歌地圖地圖讚賞!

回答

8

+0

還有一種更簡單的`$(函數(){init();});`可用。 – 2014-02-28 13:21:44

34
body.addEventListener("load", init(), false); 

那init()是說現在運行這個函數並分配它返回給load事件的任何東西。

你想要的是分配給函數的引用,而不是結果。所以你需要刪除()。

body.addEventListener("load", init, false); 

你也應該使用在window.onload而不是body.onload

addEventListener在大多數瀏覽器except IE 8支持。正如我們已經使用jQuery的圖形養眼功能,我們結束了使用此

window.onload = function(){ 
    // your code here 
} 
+2

對於IE這將是`attachEvent`。 quirksmode.org描述得非常好:http://quirksmode.org/js/events_advanced.html – 2011-02-22 18:27:56

+1

現在確實很友好 – WebWanderer 2015-04-06 17:54:21

2

簡單包裝要執行到窗口對象的onload事件中的代碼。像

$(document).ready(function() { 
    // any code goes here 
    init(); 
}); 

做了我們想要的一切,關心瀏覽器不兼容問題。

+12

這種方法有兩個潛在的問題。 1)你重寫了可能已經附加的任何其他onload事件,並且2)onload可能已經被觸發,這取決於你放置這個代碼的位置,並且因此可能永遠不會觸發 – Matt 2011-02-22 19:19:14

18

至於@epascarello提到的W3C標準的瀏覽器,你應該使用:

body.addEventListener("load", init, false); 

然而,如果你希望它在IE < 9工作,以及你可以使用:

var prefix = window.addEventListener ? "" : "on"; 
var eventName = window.addEventListener ? "addEventListener" : "attachEvent"; 
document.body[eventName](prefix + "load", init, false); 

或者如果你想要它在一個單一的行:

document.body[window.addEventListener ? 'addEventListener' : 'attachEvent'](
    window.addEventListener ? "load" : "onload", init, false); 

注:這裏我得到一個直接引用通過文檔的body元素,節省了第一行的需求。另外,如果您使用的是jQuery,並且您想要使用DOM ready事件而不是正文load,那麼答案可能會更短。

$(init); 
21

你真的應該使用以下,而不是(在所有新的瀏覽器上運行):

window.addEventListener('DOMContentLoaded', init, false); 
相關問題