2011-02-22 64 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); 
相关问题