2014-09-04 8 views
0

Я добавляю следующий код к карте Google на мой сайт. Карта содержит много точек, вытягивающих из координат, установленных в бэкэнд WordPress.Google InfoWindow не загружается внутри цикла

Я также хочу включить некоторые статические точки, которые всегда будут оставаться на карте и жестко кодировать их координаты.

Ниже приведен код, который я использую, и происходит то, что код отображает первый маркер, но не инфобокс. Из-за этого код останавливается и не продолжается через цикл for. Вопрос находится на return function() бит, но я не уверен, как заставить его работать.

var infowindow = new google.maps.InfoWindow({maxWidth: 185}); 
var setMarker; 
var setMarkers = new Array(); 

var setLocations = [ 
['<h4>Location1</h4>', 53.4264,-6.2499, '/wp-content/themes/path/to/airport_icon.png'], 
['<h4>Location2</h4>', 53.3461,-6.2969, '/wp-content/themes/path/to/train_icon.png'], 
['<h4>Location3</h4>', 53.3532,-6.2468, '/wp-content/themes/path/to/train_icon.png'], 
['<h4>Location4</h4>', 53.4264,-6.2499, '/wp-content/themes/path/to/dvc_icon.png'], 
['<h4>Location5</h4>', 53.4264,-6.2499, '/wp-content/themes/path/to/dvc_icon.png'], 
     ]; 



for (var i = 0; i < setLocations.length; i++) { 
       marker = new google.maps.Marker({ 
       map: map, 
       position: new google.maps.LatLng(setLocations[i][1], setLocations[i][2]), 
       icon : setLocations[i][3], 
     }); 
setMarkers.push(setMarker); 

google.maps.event.addListener(setMarker, 'click', (function(setMarker, i) { 
       return function() { 
       infowindow.setContent(setLocations[i][0]); 
       infowindow.open(map, setMarker); 
       } 
     })(setMarker, i)); 
} 
+0

Где вы определили 'setMarker'? Вы используете 'marker = новый google.maps.Marker()'. – MrUpsidown

+0

Привет, спасибо за ответ. 'setMarker' находится выше setLocations в моем фрагменте и да, я использую' marker = новый google.maps.Marker() ', он находится в цикле for – damienoneill2001

+1

И поэтому он не работает ... Вы определили' setMarker 'глобально (чего я бы не сделал), но вы не используете его. – MrUpsidown

ответ

1

Определите setMarker переменную внутри для цикла и толкать его в массив маркеров:

for (var i = 0; i < setLocations.length; i++) { 

    var setMarker = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(setLocations[i][1], setLocations[i][2]) 
    }); 

    google.maps.event.addListener(setMarker, 'click', (function (setMarker, i) { 
     return function() { 
      infowindow.setContent(setLocations[i][0]); 
      infowindow.open(map, setMarker); 
     } 
    })(setMarker, i)); 

    setMarkers.push(setMarker); 
} 

JSFiddle demo

Смежные вопросы