добавить маркер слушателя в цикле в Google Maps API v3? - PullRequest
1 голос
/ 31 мая 2011

У меня есть куча маркеров, и я хочу добавить обработчик наведения мыши к каждому из них. Я перебираю свои координаты, создаю новые маркеры, а затем добавляю обработчик. В обработчике я хочу изменить элемент DOM с определенным идентификатором.

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

for(i in results)
{
    r=results[i][0];
    var postId=results[i][1]; // Different for each i
    if (status == google.maps.GeocoderStatus.OK) 
    {
        markers.push(new google.maps.Marker({
            map: map,
            position: r[0].geometry.location
        }));
        console.log(postId); 
        google.maps.event.addListener(markers[markers.length-1], 'mouseover', function() {
            console.log(postId);
        });
    } 
}

Проблема в том, что независимо от того, над каким маркером я наведу курсор, postId печатается как «1».

Однако, когда я прохожу цикл, postId каждый раз отличается.

Выход на консоль:

21
20
12
10
9
3
2
1

Однако, когда я нахожу указатель мыши над маркером, всегда появляется 1.

1 Ответ

6 голосов
/ 31 мая 2011

Это потому, что вы создаете одну глобальную postId, которую разделяют все слушатели. Вы можете создавать частные версии, например, так:

(function () {
    var postId=results[i][1];
    google.maps.event.addListener(markers[markers.length-1], 'mouseover', function() {
        console.log(postId);
    });
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...