Google Maps API v3 для устранения неисправностей - PullRequest
2 голосов
/ 10 июля 2010

Может быть, я совершенно не в курсе того, что пытаюсь сделать, но у меня возникает соблазн просто вернуться к версии 2, потому что у меня все получилось легко (но я бы хотел быть мобильным).

Я пытаюсь сгенерировать несколько маркеров, и чтобы сохранить код, я поместил генерацию маркеров в цикл for, который перебирает массив маркеров (вместо (long, lat, x есть реальные значения) , х, х) в реальном массиве).

Что-то происходит над моей головой?

 function initialize() {
    var latlng = new google.maps.LatLng(25, 15);
    var myOptions = {
      zoom: 2,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);


var myMarker = new Array();
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[0] = new Array(long,lat,x,x,x); 

for(var i = 0; i < myMarker.length; i++) {
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(myMarker[i](1), myMarker[i](2)), 
        map: map, 
        title: myMarker[i](5)
      });
    var infowindow = new google.maps.InfoWindow({content: myMarker[i](5)}); 
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });
}

}

Этот код работает, когда я делаю маркеры индивидуально.

Ответы [ 3 ]

4 голосов
/ 10 июля 2010

Проблема в том, что все эти функции слушателя имеют одни и те же значения "map" и "marker". Вам нужно обернуть их в другую функцию:

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

Переменные «map» и «marker» меняются на каждой итерации цикла. Эти функции слушателя не имеют их копии, если вы явно не настроили что-то для этого, как я делал в этом примере. Таким образом, все слушатели заканчивают работу над последним, что касалось цикла!

изменить & mdash; на самом деле, теперь, когда я снова перечитываю код, «карта» выглядит так, как будто она не меняется, так что, вероятно, ее можно удалить из моей настройки (хотя это не повредит)

1 голос
/ 12 июля 2010

Хм, несколько вещей, которые я заметил, это определения массивов и доступ к ним. например,

// here your defining the array, quick tip just use [] instead of new Array(); its faster, in both execution and to type :)
var myMarker = new Array(); 

//here your defining the 1st value in the array at the 0 index
myMarker[0] = new Array(long,lat,x,x,x); 

//but again here your overriding the first value of the array at 0 index
myMarker[0] = new Array(long,lat,x,x,x); 

так должно выглядеть больше

var myMarker = new Array();
myMarker[0] = new Array(long,lat,x,x,x); 
myMarker[1] = new Array(long,lat,x,x,x); 
myMarker[2] = new Array(long,lat,x,x,x); 
myMarker[3] = new Array(long,lat,x,x,x); 
myMarker[4] = new Array(long,lat,x,x,x); 
myMarker[5] = new Array(long,lat,x,x,x); 
myMarker[6] = new Array(long,lat,x,x,x); 

, а затем при доступе к значениям в вашем массиве вы используете

title: myMarker[i](5)

Должно быть, при условии, что у вас есть 5 значений в каждом массиве маркеров

title: myMarker[i][4]

Массивы в javascript основаны на индексации 0 и используют квадратные скобки [], а не круглые скобки.

редактировать: исправления грамматики:)

0 голосов
/ 25 сентября 2012

Проблема в том, что существует только одно значение marker, и каждая итерация цикла меняет его. Функции обработчика событий не отслеживают, какой маркер им нужен.

Правильный способ исправить это - знать, что marker передается в обработчик событий как this. Простое исправление:

google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map, this);  // <-- changed 'marker' to 'this'
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...