使用事件的多个点的openInfoWindowHtml问题

时间:2010-01-18 04:37:10

标签: google-maps

我是初学者并使用 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 :(得分:0)

您只是将点击事件与最后一个标记相关联。您需要为要添加到地图的每个标记调用 GEvent.addListener

您还需要确保在触发事件时,回调中的标记是与事件关联的标记。您可以通过将标记创建代码移动到单独的函数中来实现这一点(利用Javascript Closures确保回调中的标记是外部函数中作用域中的标记。)

查看此example based on your samplecode)。