проблема с openInfoWindowHtml для нескольких точек, использующих события - PullRequest
1 голос
/ 18 января 2010

Я новичок и использую openInfoWindowHtml для отображения всплывающего текста. мое приложение может показывать одно местоположение и несколько мест.

Мой текст с одним местоположением работает нормально, используя openInfoWindowHtml ();

Но когда я делаю несколько, он всегда показывает текст последних точек, и событие щелчка для всех точек никогда не происходит.

фрагмент кода:

var markers =[];

for(var i=0;i<(geoList.length)-1;i++)
{
    var geo = (geoList[i]).split(',');
    map.setCenter(new GLatLng(geo[3], geo[4]), 2);
    var ip_point = new GLatLng(geo[3], geo[4]);

    //creating a marker 
    marker = new GMarker(ip_point);
    map.addOverlay(marker);
    markers[i] = marker;

    // The ballon text which shows the details of the ip address

    var ip = "<div style=\"font-family:Verdana;font-size:10px;text-align:left\">";
    //var dbName = base64_decode(geo[5]); // added on 14Dec2009
    //If IP is not found it goes to else loop           
    if(geo.length== 9){
        ip += "<span class=\"FSColorBold\">"+geo[5]+"</span><br /> ";
        ip += "<?php __('IP:'); ?>"+geo[6]+"<br />";
        ip += "<?php __('ID:'); ?>"+geo[7]+"<br />";
        ip += "<?php __('Last Accessed: '); ?>"+geo[8]+"<br />";
        ip += geo[2]+","+geo[1]+"<br />";
    }
} 

// shows IP details info by default         
map.openInfoWindow(map.getCenter(),ip);

// Reloads the IP details info on clicking the marker 

GEvent.addListener(marker, "click", function(){
    marker.openInfoWindowHtml(ip+'');});

Точки находятся в цикле, а слушатели событий находятся вне цикла.

Может кто-нибудь сказать мне точно, что пошло не так?

1 Ответ

0 голосов
/ 02 февраля 2010

Вы связываете событие клика только с последним маркером. Вам нужно вызвать GEvent.addListener для каждого маркера, который вы добавляете на карту.

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

Посмотрите этот пример на основе вашего образца ( код ).

...