Google Maps API v3 — информационное окно не определено Ошибка

Карта всплывает, и появляется точка. У меня тоже заголовок появляется. Но как только я нажимаю на маркер, чтобы получить информацию, ничего не появляется. Информация о Firebug ниже.

Информация вводится через базу данных, и есть несколько элементов; несколько маркеров отображаются на карте так, как должны.

Любая помощь будет оценена. Спасибо..

Информация о точке Firebug:

MarkLat[i] = xx.xxxxxxxxxxxxxx;
MarkLong[i] = -xx.xxxxxxxxxxxxxx;
MarkerTitle[i] = 'Title 1';
Display[i] = '<table><tr><td>Title 1</td></tr><tr><td>Title 1 Address<br />Title 1 City, State Zip</td></tr><tr><td>Title 1 Phone</td></tr><tr><td>Title 1 Email</td></tr><tr><td>Title 1 URL</td></tr></table>';

Ошибка Firebug: информационное окно не определено infowindow.open(карта,маркер);

Код:

<script type="text/javascript">
  var i = -1;
  var MarkLat=new Array();
  var MarkLong=new Array();
  var MarkerTitle=new Array();
  var Display=new Array();
  var MapCenter = new google.maps.LatLng(xx.xxxxxxxxxxxxxx,-xx.xxxxxxxxxxxxxx)
</script>

<script type="text/javascript">
  var i = i + 1;
  MarkLat[i] = [[Lat]];
  MarkLong[i] = [[Long]];
  MarkerTitle[i] = '[[Title]]';
  Display[i] = '<table><tr><td>[[Title]]</td></tr><tr><td>[[Address]]<br />[[City]], [[State]] [[Zip]]</td></tr><tr><td>[[Phone]]</td></tr><tr><td>[[Email]]</td></tr><tr><td>[[WebURL]]</td></tr></table>';
</script>

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
  function initialize() {
    var myOptions = {
      zoom: 12,
      center: MapCenter,
      zoomControl: true,
      zoomControlOptions: {
        position: google.maps.ControlPosition.TOP_RIGHT,
        style: google.maps.ZoomControlStyle.SMALL
      },
      mapTypeControl: true,
      mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
      },
      scaleControl: true,
      scaleControlOptions: {
        position: google.maps.ControlPosition.TOP_CENTER
      },
      mapTypeId: google.maps.MapTypeId.ROADMAP,
    };

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

    for (var i = 0, length = 50; i < length; i++) {
      var latLng = new google.maps.LatLng(MarkLat[i],MarkLong[i]);
      var infoWindow = new google.maps.InfoWindow(Display[i]);

      // Creating a marker and putting it on the map
      var marker = new google.maps.Marker({
        position: latLng,
        map: map,
        title: MarkerTitle[i]
      });

      google.maps.event.addDomListener(marker, 'click', function() {
        infowindow.open(map,marker);
      });
    }
  }

  google.maps.event.addDomListener(window, 'load', initialize);
</script>

person user1424532    schedule 02.06.2012    source источник
comment
Вопрос: вы планируете одновременно открывать несколько окон InfoWindow (вышеприведенный код, кажется, подразумевает это) или открывать одновременно только одно окно (щелчок по разным маркерам закрывает существующее окно)?   -  person Tina CG Hoehr    schedule 03.06.2012


Ответы (2)


Мне не хватило замены на заглавную W. Открывалась только одна локация. Я проверил ваш код с двумя точками:

MarkLat = [];
MarkLong = [];
Display = [];
MarkerTitle= [];

MarkLat[0] = 0;
MarkLong[0] = 0;
Display[0] = { content: "hi" };
MarkerTitle[0] = "hello";

MarkLat[1] = 10;
MarkLong[1] = 10;
Display[1] = { content: "hi 2" };
MarkerTitle[1] = "hello 2";

Я предполагаю, что вам нужно только одно InfoWindow на экране в любой момент времени. Затем следует объявить одно окно InfoWindow, содержимое которого будет храниться внутри маркера, а содержимое будет изменяться при щелчке маркера.

var infoWindow = new google.maps.InfoWindow();
for (var i = 0, length = Display.length; i < length; i++) {
  var latLng = new google.maps.LatLng(MarkLat[i],MarkLong[i]);

  // Creating a marker and putting it on the map
  var marker = new google.maps.Marker({
    position: latLng,
    map: map,
    title: MarkerTitle[i],
    infoWindowContent: Display[i]
  });

  // Notice I used the 'this' keyword inside the listener
  google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(this.infoWindowContent.content);
    infoWindow.open(map,this);
  });
}

В качестве альтернативы, когда появляется много всплывающих окон InfoWindow, необходимо изменить прослушиватель кликов, чтобы сохранить ссылку на каждое отдельное окно InfoWindow. Этот эффект достигается с помощью анонимной функции, обернутой вокруг функции infoWindow.open (создается новая область действия функции).

for (var i = 0, length = Display.length; i < length; i++) {
  var latLng = new google.maps.LatLng(MarkLat[i],MarkLong[i]);
  var infoWindow = new google.maps.InfoWindow(Display[i]);

  // Creating a marker and putting it on the map
  var marker = new google.maps.Marker({
    position: latLng,
    map: map,
    title: MarkerTitle[i] 
  });

  google.maps.event.addListener(marker, 'click', (function(infoWindow) {
    return function() {
      infoWindow.open(map,this);
    }
  })(infoWindow));
}
person Tina CG Hoehr    schedule 02.06.2012

информационное окно != информационное окно

Вы только что объявили его с большой буквы, пытаясь использовать без

person Robot Woods    schedule 02.06.2012
comment
Здравствуйте и спасибо за ответ. Я попытался изменить строку var infoWindow = new google.maps.InfoWindow(Display[i]); и измените maps.InfoWindow на maps.infowindow и никаких изменений; же инфоокно не определяется. Я просмотрел разные конфигурации и образцы, но, похоже, эта проблема не устранена. - person user1424532; 03.06.2012
comment
Я заработал. Еще раз спасибо за ваш ответ; это помогло разобраться в проблеме.'code'for (var i = 0, length = 50; i ‹ length; i++) { var latLng = new google.maps.LatLng(Lat[i],Long[i]); var InfoWindow = новый google.maps.InfoWindow(); // Создание маркера и размещение его на карте var marker = new google.maps.Marker({ position: latLng, map: map, title: MarkerTitle[i], html: Display[i] }); google.maps.event.addListener(marker, 'click', function () { InfoWindow.setContent(this.html); InfoWindow.open(map, this); }); }'код' - person user1424532; 03.06.2012