Прикрепите прослушиватели событий к набору маркеров, используя одну переменную в Google Maps v3 - цикл, закрытие - PullRequest
2 голосов
/ 14 октября 2011

Я создал набор маркеров, используя массив в одной переменной.Я хотел бы добавить прослушиватель события «click» для каждого маркера, который ссылается на URL, который указан для каждого элемента в массиве.Следующая функция прекрасно работает, за исключением того, что она присваивает последний URL в массиве всем маркерам (вместо назначения первого URL-адреса первому маркеру и второго URL-адреса второму маркеру и т. Д.)Остальные данные назначаются соответствующим образом.Я знаю, что решение включает замыкание в цикле, но я не могу понять, как правильно его создать.Любая помощь будет высоко ценится.

var tours = [

['Title 1', 35.22024012078826, -80.81088066101074, 'tour/1'],
['Title 2', 35.20376057077245, -80.84718704223633, 'tour/2']

];


setTourMarkers(map, tours);


function setTourMarkers(map, locations) {


var tourImage = new google.maps.MarkerImage('http://www.tours.com/images/camera-icon.png',
  new google.maps.Size(27, 22),
  new google.maps.Point(0,0),
  new google.maps.Point(14, 11));


var tourShape = {
  coord: [1, 1, 1, 27, 27, 22, 22 , 1],
  type: 'poly'
};


for (var i = 0; i < locations.length; i++) {
  var tour = locations[i];
  var tourLatLng = new google.maps.LatLng(tour[1], tour[2]);
  var marker = new google.maps.Marker({
  position: tourLatLng,
  map: map,
  icon: tourImage,
  shape: tourShape,
  title: tour[0]

  }); //End new google.maps.Marker

  google.maps.event.addListener(marker, 'click', function() {
    window.location.href = "http://www.tours.com/" + tour[3];

  }); //End google.maps.event.addListener

}; // End "for" statement ***************


}; // End setTourMarkers function

1 Ответ

1 голос
/ 16 октября 2011

Отправлено оригинальным постером , но они включили его в свой вопрос. Перемещено здесь к ответу, где оно принадлежит:

Разобрался ... изменил прослушиватель событий на:

google.maps.event.addListener(marker, 'click', (function(tour) {
return function(){
  window.location.href = "http://www.tours.com/" + tour[3];
    }

})(tour)); //End google.maps.event.addListener
...