Создание пользовательской карты Google с несколькими маркерами и всплывающими окнами - Проблемы - PullRequest
0 голосов
/ 04 августа 2011

Я пытался создать собственную карту Google, я написал код, но что-то не так, задавался вопросом, может ли кто-нибудь указать на то, что я сделал неправильно. Код здесь:

<script type="text/javascript">
  function initialize() {
    var myLatlng = new google.maps.LatLng(30,0);
    var myOptions = {
      zoom: 2,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
  }

  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  var countries = Array();

  countries.push({
      marker: new google.maps.Marker({position: new google.maps.LatLng(4.52,115), map: map, title: 'Test'}),
      infowindow: new google.maps.InfoWindow({content: "Hello world"})
  });
  countries.push({
      marker: new google.maps.Marker({position: new google.maps.LatLng(42.45,23.20), map: map, title: 'Test2'}),
      infowindow: new google.maps.InfoWindow({content: "Hello world2"})
  });
  countries.push({
      marker: new google.maps.Marker({position: new google.maps.LatLng(12.15,-1.30), map: map, title: 'Test3'}),
      infowindow: new google.maps.InfoWindow({content: "Hello world3"})
  });

  for each (var item in countries) {
      google.maps.event.addListener(item.marker, 'click', function() {
        item.infowindow.open(map, item.marker);
      });

}

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Помимо , используя неправильный стиль for loop , вы пытаетесь сделать функцию в цикле . Это очень распространенная ошибка. Поскольку JS имеет область действия на уровне функций, а не на уровне блоков, это не работает, как вы могли ожидать.

Попробуйте это:

function makeCallback(country) {
    return function () {
        country.infowindow.open(map, country.marker);
    };
}

var item;
for (var i=0; i<countries.length; i++) {
    item = countries[i];
    google.maps.event.addListener(item.marker, 'click', makeCallback(item));
}
0 голосов
/ 04 августа 2011

Кажется, работает нормально, я вижу карту с 3 маркерами, но не зная, в чем проблема, трудно сказать.

Несколько предположений:

  • В конце отсутствует фигурная скобка, закрывающая инициализацию
  • У вас есть div с идентификатором "map_canvas"?
  • Инициализируется, откуда вызывается инициализация?
  • Вы включили JavaScript карт Google?
...