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