#javascript #html #r
#javascript #HTML #r
Вопрос:
Я очень новичок в HTML и Javascript (менее недели опыта) и застрял в следующей ситуации. Я создал 6 визуализаций карт Google, используя пакет googleVis для R (простые вещи — просто маркеры на карте). Я извлек Javascript из объектов googleVis в R и включил их в простой сайт, который содержит 6 разделов для каждой из 6 разных карт.
Каждый файл Javascript включает функцию для создания объекта JSON, функцию для рисования карты и функцию для отображения карты:
//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);
}
Каждый файл 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>
ПРОБЛЕМА: с тем, как я в настоящее время собрал этот сайт вместе, если в любом месте сайта вызываются две функции dsplayChart **() (как в этом примере, с displayChartWest() и displayChartMidwest()), все divs отображаются пустыми. Но, если бы я просто включил один из этих вызовов функций, тогда карта нормально отображалась бы в соответствующем div. Каким-то образом вызов двух или более из этих функций приводит к конфликту, хотя я просто не знаю почему. Ваша помощь ОЧЕНЬ ценится. Приветствия, АР
Ответ №1:
Я думаю, вам может потребоваться дождаться загрузки DOM, прежде чем запускать ваши диаграммы. Без использования библиотеки, такой как jQuery, вы могли бы сделать это с помощью события body onload:
<body onload="displayCharts()">
...page source...
<script type="text/javascript">
function displayCharts() {
displayChartWest();
displayChartMidwest();
}
</script>
</body>
Комментарии:
1. Я думал, что это может быть что-то вроде этого, но когда я попытался использовать onload в теге body или window.onload или даже включить jQuery и использовать что-то вроде $(document) . ready(), я получил тот же результат.
2. Я попытался загрузить это на другой машине и смог загрузить три карты, но добавление четвертой карты (или четвертого вызова функции displayChart ****()) сломало сайт. Мое ограниченное понимание заставляет меня задуматься о том, как упорядочить загрузку карт, но я не уверен, куда обратиться…
3. Хм, как насчет размещения каждой карты отдельно
iframe
?
Ответ №2:
Вместо этого:
google.load("visualization", "1", { packages:["map"] });
google.setOnLoadCallback(drawChartWest);
попробуйте это вместо:
google.load("visualization", "1", { packages:["map"],callback: drawChartWest});