Javascript 谷歌地图,标记信息窗口赢得';你不来吗?

Javascript 谷歌地图,标记信息窗口赢得';你不来吗?,javascript,google-maps,Javascript,Google Maps,我编写了这段代码,它循环遍历一个lat/long坐标数组,并在每个坐标上放置一个标记。一切顺利,单击标记后信息窗口将不会出现 var ExpTowerIcon = new GIcon(); ExpTowerIcon.image = "tower.png"; ExpTowerIcon.iconSize = new GSize(75, 75); ExpTowerIcon.iconAnchor = new GPoint(37, 65); ExpTowerIcon.in

我编写了这段代码,它循环遍历一个lat/long坐标数组,并在每个坐标上放置一个标记。一切顺利,单击标记后信息窗口将不会出现

var ExpTowerIcon = new GIcon(); 
    ExpTowerIcon.image = "tower.png";
    ExpTowerIcon.iconSize = new GSize(75, 75);
    ExpTowerIcon.iconAnchor = new GPoint(37, 65);
    ExpTowerIcon.infoWindowAnchor = new GPoint(37, 20);


var marker=new Array();

for ( i=0 ; i < lat.length  ; i++ ) {

    var MarkerPoint = new GLatLng(lat[i],long[i]); 
    marker[i] = new GMarker(MarkerPoint,{icon:ExpTowerIcon}) 
    map.addOverlay( marker[i] );

    GEvent.addListener( marker[i] , 'click', function() { marker[i].openInfoWindowHtml('Hello!') ; });

    var polyline = new GPolyline([ new GLatLng(lat[i],long[i]) , new GLatLng(lat[i+1],long[i+1]) ], "#ff0000", 5);
    map.addOverlay(polyline);

    }
var exptouricon=new GIcon();
ExpTowerIcon.image=“tower.png”;
ExpTowerIcon.iconSize=新的GSize(75,75);
ExpTowerIcon.iconAnchor=新的GPoint(37,65);
ExpTowerIcon.infoWindowAnchor=新的GPoint(37,20);
var marker=新数组();
对于(i=0;i
有什么想法吗?谢谢

单击处理程序:

function() { window['marker'+i].openInfoWindowHtml('Hello!') ; }
引用(全局)变量i,当for循环退出时,该变量将设置为lat.length

我建议:

function() { this.openInfoWindowHtml('Hello!') ; }
function getHandler(i) {
    return function () { this.openInfoWindow('tower' + i) ; };
}

for (i = 0; i < lat.length; i++) {
    ...
    GEvent.addListener( marker[i] , 'click', getHandler(i));
    ...
}
编辑:

如果需要在click事件处理程序中包含标记号,我建议:

function() { this.openInfoWindowHtml('Hello!') ; }
function getHandler(i) {
    return function () { this.openInfoWindow('tower' + i) ; };
}

for (i = 0; i < lat.length; i++) {
    ...
    GEvent.addListener( marker[i] , 'click', getHandler(i));
    ...
}
函数getHandler(i){ 返回函数(){this.openInfoWindow('tower'+i);}; } 对于(i=0;i 这将变量i绑定到click处理程序(该处理程序现在是一个闭包)。有关闭包的详细信息,请参见单击处理程序:

function() { window['marker'+i].openInfoWindowHtml('Hello!') ; }
引用(全局)变量i,当for循环退出时,该变量将设置为lat.length

我建议:

function() { this.openInfoWindowHtml('Hello!') ; }
function getHandler(i) {
    return function () { this.openInfoWindow('tower' + i) ; };
}

for (i = 0; i < lat.length; i++) {
    ...
    GEvent.addListener( marker[i] , 'click', getHandler(i));
    ...
}
编辑:

如果需要在click事件处理程序中包含标记号,我建议:

function() { this.openInfoWindowHtml('Hello!') ; }
function getHandler(i) {
    return function () { this.openInfoWindow('tower' + i) ; };
}

for (i = 0; i < lat.length; i++) {
    ...
    GEvent.addListener( marker[i] , 'click', getHandler(i));
    ...
}
函数getHandler(i){ 返回函数(){this.openInfoWindow('tower'+i);}; } 对于(i=0;i
这将变量i绑定到click处理程序(该处理程序现在是一个闭包)。有关闭包的更多信息,请参见

部分有效,现在所有标记都有信息窗口,但是。。。我使用过这个函数GEvent.addListener(标记[I],'click',function(){this.openInfoWindow('tower'+I);});它会将所有标记标记为“tower6”,而不是数组中的当前编号。部分有效,现在所有标记都有信息窗口,但是。。。我使用过这个函数GEvent.addListener(标记[I],'click',function(){this.openInfoWindow('tower'+I);});它会将所有标记标记为“tower6”,而不是数组中的当前编号。