Javascript 如何使用window.onload?

Javascript 如何使用window.onload?,javascript,Javascript,我正在用MVC重构一个网站。一组包含javascript、php、html等的巨大页面正在变成一系列控制器和视图。我正试图以模块化的方式来实现这一点,以便将视图拆分为“模块”,以便在需要时可以在其他页面中重用 例如。 “查看/搜索表单仅显示带有搜索表单的一个div “查看/显示\u事件显示事件列表 等等 其中一个旧页面应该加载一个带有标记的谷歌地图 在代码的其余部分中,我可以如下识别相关位 <head> <script src="http://maps.google.com/m

我正在用MVC重构一个网站。一组包含javascript、php、html等的巨大页面正在变成一系列控制器和视图。我正试图以模块化的方式来实现这一点,以便将视图拆分为“模块”,以便在需要时可以在其他页面中重用

例如。 “查看/搜索表单仅显示带有搜索表单的一个div “查看/显示\u事件显示事件列表 等等

其中一个旧页面应该加载一个带有标记的谷歌地图

在代码的其余部分中,我可以如下识别相关位

<head>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=blablabla" type="text/javascript"></script>

<script type="text/javascript">
//<![CDATA[
function load() {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        var point = new GLatLng(<?php echo ($info->lat && $info->lng) ? $info->lat .",". $info->lng : "51.502759,-0.126171"; ?>);
        map.setCenter(new GLatLng(<?php echo ($info->lat && $info->lng) ? $info->lat .",". $info->lng : "51.502759,-0.126171"; ?>), 15);
        map.addControl(new GLargeMapControl());
        map.addControl(new GScaleControl());
        map.addOverlay(new GMarker(point));
        var marker = createMarker(point,GIcon(),"CIAO");
        map.addOverlay(marker);
    }
}
//]]>
</script>
</head>

//lat&&$info->lng)$信息->纬度。“,”$信息->液化天然气:“51.502759,-0.126171”?>);
setCenter(新GLatLng(),15);
addControl(新的GlargeMappControl());
addControl(新的GScaleControl());
添加覆盖图(新GMarker(点));
var marker=createMarker(点,GIcon(),“CIAO”);
添加覆盖图(标记);
}
}
//]]>
…那么

<body onload="load()" onunload="GUnload()">

…最后是显示地图的div

<div id="map" style="width: 440px; height: 300px"> </div>

我不太了解js,但我的理解是

a) 我必须在我正在编写的视图模块中包含脚本(直接在HTML中?我更愿意加载单独的脚本)

b) 我必须使用等效于body onload的函数来触发这个函数。。。(显然在我看来没有body标签。在我的无知中,我尝试了div onload=…但似乎没有起作用:)

你建议我做什么? 我读过关于window.onload的文章,但不知道正确的语法是什么


请记住,页面的其他部分包括在页脚后调用的其他js函数(例如google adsense)。

您可以使用js将处理程序附加到窗口加载事件,因此不需要标记

// crossbrowser event binding from http://www.quirksmode.org/js/eventSimple.html
//function addEventSimple(obj,evt,fn) {
//    if (obj.addEventListener)
//      obj.addEventListener(evt,fn,false);
//    else if (obj.attachEvent)
//      obj.attachEvent('on'+evt,fn);
//}

// using Google API's event functions
GEvent.addDomListener(window, "load", load);
GEvent.addDomListener(window, "unload", GUnload);

function load() {
    // your load function
}
将其放入视图上的脚本标记中,加载窗口后将调用加载函数


google API可能还提供了一种附加加载事件的方法,但我对它不熟悉。

我在做一些实验,发现了一个可能的解决方案(或者至少它似乎正在工作):)我将主脚本移动到MAP div中,然后在脚本本身的末尾添加了两行:load();调用函数,并使用GUnload()。基本上,onload和onunload的函数都是直接调用的。它似乎在工作,但我不知道这是否只是运气,可能会导致问题-你怎么看?@Patrick,这可能足够了,这取决于googleapi的实际功能。当您以这种方式编写脚本时,脚本将在页面加载完成之前执行(它们还将阻止加载,直到执行完成)。通过将其放在加载事件上,映射加载将异步完成。有没有一种方法可以将整个脚本放在JS文件中,并使用script src='…'调用它?不过,我需要向它传递一些变量,上面脚本中的变量是由php生成的-我怎么做?@Patrick,是的,您可以将其放入脚本文件中。在您的视图中,您仍然需要设置一个变量
var latLong=,然后在脚本文件中只需使用
latLong
而不是php。旁注:此addEventSimple实现已由
GEvent.adddomstener
()封装,该实现可通过包含Google maps api供OP使用。OPs代码示例还包括
onunload
,它由
GEvent.removeListener
封装。