0

嗨,我有一个名为 .google 地图的多边形数组regionPolygons。现在我希望每次单击多边形时,我的地图都会将其中心设置在多边形的中心。这是我如何实现它。

for (i = 0; i < regionPolygons.length; i++) {
  google.maps.event.addListener(regionPolygons[i], 'click', function () {                
    // do the stuff, things seem ok here
  }
}

现在无论我点击哪个多边形,我都会被带到最后一个多边形的中心。我现在如何让谷歌地图点击哪个多边形?谢谢

编辑:我的问题是重复的。似乎将相同的代码复制到新函数中是可行的。似乎 Javascript 在从主程序传递到子程序时创建了变量的新副本。有人可以帮我解释一下吗?

4

1 回答 1

1

谷歌在事件处理程序中提供单击的多边形是明智的thisevent.target但 API 文档没有提供实际完成的线索。无论如何尝试。

如果这些建议都不起作用,那么您可以利用闭包来保留 的副本i,如下所示:

for(var i=0; i<regionPolygons.length; i++) {
    google.maps.event.addListener(regionPolygons[i], 'click', (function(i) {
        return function() {
            var polygon = regionPolygons[i];
            //do stuff here with `polygon`
        };
    })(i));
}

或者,您可以使用相同的技术来保留对多边形对象本身的引用:

for(var i=0; i<regionPolygons.length; i++) {
    var p = regionPolygons[i];
    google.maps.event.addListener(p, 'click', (function(polygon) {
        return function() {
            //do stuff here with `polygon`
        };
    })(p));
}

净效应是一样的;在事件处理程序中,您最终会引用单击的多边形。

于 2013-05-26T05:35:34.487 回答