Javascript 一个页面上有多个谷歌地图——一次只能加载一个
我对HTML和Javascript非常陌生(不到一周的经验),我陷入了以下情况。我使用googleVis R包创建了6个google地图可视化(简单的东西——只是地图上的标记)。我从R中的googleVis对象中提取了Javascript,并将它们包含在一个简单的站点中,该站点包含6个div,分别对应于6个不同的地图 每个Javascript文件包括一个创建JSON对象的函数、一个绘制地图的函数和一个显示地图的函数:Javascript 一个页面上有多个谷歌地图——一次只能加载一个,javascript,html,r,Javascript,Html,R,我对HTML和Javascript非常陌生(不到一周的经验),我陷入了以下情况。我使用googleVis R包创建了6个google地图可视化(简单的东西——只是地图上的标记)。我从R中的googleVis对象中提取了Javascript,并将它们包含在一个简单的站点中,该站点包含6个div,分别对应于6个不同的地图 每个Javascript文件包括一个创建JSON对象的函数、一个绘制地图的函数和一个显示地图的函数: //define JSON function gvisDataWest
//define JSON
function gvisDataWest ()
{
var data = new google.visualization.DataTable();
var datajson =
[
[
33.5313,
-112.1774,
"<p>2005-2009 Poverty Rate: 40.7%</p> <p>2000 Poverty Rate: 34.3%</p> <p>Significant difference: 0.0 points </p>"
],
... many rows of data ...
];
data.addColumn('number','Latitude');
data.addColumn('number','Longitude');
data.addColumn('string','tip');
data.addRows(datajson);
return(data);
}
//draw chart
function drawChartWest() {
var data = gvisDataWest();
var options = {};
options["showTip"] = true;
options["enableScrollWheel"] = true;
options["width"] = 400;
var chart = new google.visualization.Map(
document.getElementById('West')
);
chart.draw(data,options);
}
//display chart
function displayChartWest()
{
google.load("visualization", "1", { packages:["map"] });
google.setOnLoadCallback(drawChartWest);
}
//定义JSON
函数gvisDataWest()
{
var data=new google.visualization.DataTable();
var datajson=
[
[
33.5313,
-112.1774,
“2005-2009年贫困率:40.7%2000年贫困率:34.3%显著性差异:0.0分”
],
…许多行数据。。。
];
data.addColumn('number','Latitude');
data.addColumn('number','Longitude');
data.addColumn('string','tip');
data.addRows(datajson);
返回(数据);
}
//绘制图表
函数drawChartWest(){
var data=gvisDataWest();
var选项={};
选项[“showTip”]=true;
选项[“enableScrollWheel”]=true;
选项[“宽度”]=400;
var chart=new google.visualization.Map(
document.getElementById('West')
);
图表绘制(数据、选项);
}
//显示图表
函数displayChartWest()
{
load(“可视化”,“1”,“{packages:[“map”]});
setOnLoadCallback(drawChartWest);
}
每个javascript文件都包含国家不同地区的函数和数据(例如,gvisDataMidwest()、givsDataSouthEast()等都有定义)
下面是我的HTML的大致外观:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta content="text/xml; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script src="../povscripts/map1.js" type="text/javascript"></script>
<script src="../povscripts/map2.js" type="text/javascript"></script>
<script src="../povscripts/map3.js" type="text/javascript"></script>
<script src="../povscripts/map4.js" type="text/javascript"></script>
<script src="../povscripts/map5.js" type="text/javascript"></script>
<script src="../povscripts/map6.js" type="text/javascript"></script>
</head>
<body>
...a bunch of divs, headers, <p>'s, etc...
...then six divs like this, each with an appropriate id:
<div class="anncdiv">
<div class="bannertitle">
<p class="btxt">West</p>
</div>
<div class="anncdivIn" id="West">
<script type="text/javascript"> displayChartWest() </script>
</div>
</div>
<div class="anncdiv">
<div class="bannertitle">
<p class="btxt">Midwest</p>
</div>
<div class="anncdivIn" id="Midwest">
<script type="text/javascript"> displayChartMidwest() </script>
</div>
</div>
…一堆div、header、等。。。
…然后是这样的六个div,每个div都有一个合适的id:
西方
displayChartWest()
中西部地区
显示图表中西部()
问题是:按照我目前拼凑这个站点的方式,如果在站点的任何地方调用了两个dsplayChart**()函数(如本例中的displayChartWest()和displayChartMidwest()),则所有div都将显示为空。但是,如果我只包含其中一个函数调用,那么映射在相应的div中显示良好。不知何故,调用两个或多个函数会导致冲突,尽管我不知道为什么。非常感谢你的帮助。干杯,AR我想您可能需要等到DOM加载完毕后再启动图表。如果不使用jQuery之类的库,您可以使用body onload事件来完成:
<body onload="displayCharts()">
...page source...
<script type="text/javascript">
function displayCharts() {
displayChartWest();
displayChartMidwest();
}
</script>
</body>
…页面源。。。
函数displayCharts(){
displayChartWest();
显示图表中西部();
}
不要这样做:
google.load("visualization", "1", { packages:["map"] });
google.setOnLoadCallback(drawChartWest);
请尝试以下方法:
google.load("visualization", "1", { packages:["map"],callback: drawChartWest});
我原以为可能是这样的,但当我尝试在body标记或window.onload中使用onload,甚至包括jQuery并使用$(document).ready()之类的东西时,我遇到了相同的结果。我尝试在另一台机器上加载它,能够加载三个贴图,但添加了第四个贴图(或者对displayChart****()函数的第四次调用)破坏了该网站。我有限的理解让我思考了订购地图的方法,但我不确定该转向何处……嗯,将每个地图放在单独的
iframe
中如何?