Dan*_*mer 34 html javascript javascript-events onload-event
我们希望在文档中包含Google Maps API的地图.文档告诉我们用一个由body的onload()事件调用的函数初始化地图.
通常的打电话方式:
<body onload="initialize_map();">
Run Code Online (Sandbox Code Playgroud)
这对我们来说不起作用,因为我们正在使用Template :: Toolkit,并且<body>标签已经包含在我们的包装器中.简而言之:<body>当我们的javascript代码开始运行时,标签已经打印出来了.
我试过这样的东西,但它只适用于onclick,而不是onload.我猜这是因为javascript代码位于<body>标签本身之下.
var body = document.getElementsByTagName("body")[0];
body.addEventListener("load", init(), false);
function init() {
alert("it works!");
};
Run Code Online (Sandbox Code Playgroud)
任何帮助如何启动谷歌地图地图赞赏!
epa*_*llo 44
body.addEventListener("load", init(), false);
Run Code Online (Sandbox Code Playgroud)
那个init()说现在运行这个函数并将它返回的任何内容分配给load事件.
你想要的是分配对函数的引用,而不是结果.所以你需要删除().
body.addEventListener("load", init, false);
Run Code Online (Sandbox Code Playgroud)
你也应该使用window.onload而不是body.onload
addEventListener大多数浏览器都支持IE 8以外的版本.
Jac*_*zen 36
您应该使用以下代码(适用于所有较新的浏览器):
window.addEventListener('DOMContentLoaded', init, false);
Run Code Online (Sandbox Code Playgroud)
Mar*_*des 18
正如@epascarello提到的W3C标准浏览器,你应该使用:
body.addEventListener("load", init, false);
Run Code Online (Sandbox Code Playgroud)
但是,如果您希望它在IE <9上工作,您可以使用:
var prefix = window.addEventListener ? "" : "on";
var eventName = window.addEventListener ? "addEventListener" : "attachEvent";
document.body[eventName](prefix + "load", init, false);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要一行:
document.body[window.addEventListener ? 'addEventListener' : 'attachEvent'](
window.addEventListener ? "load" : "onload", init, false);
Run Code Online (Sandbox Code Playgroud)
注意:这里我通过文档直接引用了body元素,节省了对第一行的需求.
此外,如果你正在使用jQuery,并且你想要使用DOM ready事件而不是身体load,那么答案可能更短......
$(init);
Run Code Online (Sandbox Code Playgroud)
由于我们已经使用jQuery进行图形化的糖果功能,我们最终使用了这个.像这样的代码
$(document).ready(function() {
// any code goes here
init();
});
Run Code Online (Sandbox Code Playgroud)
做了我们想要的一切,并关注浏览器不兼容性.