【问题标题】:Google Maps marker.getPosition only uses last co-ords [duplicate]Google Maps marker.getPosition 仅使用最后一个坐标[重复]
【发布时间】:2013-08-01 20:08:09
【问题描述】:

我正在从 XML 列表中导入地图数据并将其放入 markerArray,然后调用 createMarkers(); 标记出现在地图上没问题,但点击总是会转到列表中的最后一个标记。

感谢所有帮助。

function createMarkers() {
for (i=0; i<markerArray.length; i++){
 var marker = new google.maps.Marker({position:markerArray[i].latlng, map:map, title:markerArray[i].label, icon:images[markerArray[i].type]});
 google.maps.event.addListener(marker, 'click', function() {
        map.setZoom(9);
  map.setCenter(marker.getPosition());
    }); 
}

【问题讨论】:

  • 只是一个随机的想法:你可以使用 map.setCenter(this.getPosition()); ?

标签: javascript google-maps google-maps-markers


【解决方案1】:

marker 在每次循环迭代时重新定义。绑定到'click' 的函数应该用marker 的本地副本包装在闭包中。我不得不做一次类似的事情并使用它:

 google.maps.event.addListener(marker, 'click', 
   (function(marker_inner) {
      return function() {
        map.setZoom(9);
        map.setCenter(marker_inner.getPosition());
      }
   })(marker)
 ); 

【讨论】:

  • 这当然有效,(this.getPosition)也是如此。后者似乎是一个更优雅的解决方案,还是我错过了什么?
  • 在我从上面获取 sn-p 的代码中,还有更多的事情发生......this 足以满足您的要求,但我想我只是喜欢闭包;)
  • 谢谢。这也适用于 infoWindow 数据吗?
  • 使用闭包方法设置infoWindow数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2013-08-12
  • 1970-01-01
相关资源
最近更新 更多