1

我一直在尝试在谷歌地图上创建一些多边形叠加层,点击后将链接到新窗口中的另一个网页。然而,它只链接到最后生成的多边形的 URL。任何想法为什么?我想我错过了一些基本的东西,但这与我如何生成多边形然后尝试从中提取 URL 有关吗?

<script type="text/javascript"> 
  var mapSquares = {};

  mapSquares['square1'] = {
    coords: [
      new google.maps.LatLng(52.572177, -0.247192), 
      new google.maps.LatLng(52.612177, -0.247192), 
      new google.maps.LatLng(52.612177, -0.347192),
      new google.maps.LatLng(52.572177, -0.347192)
            ],
    url: 'http://www.google.co.uk'
  };

  mapSquares['square2'] = {
    coords: [
      new google.maps.LatLng(52.522177, -0.247192), 
      new google.maps.LatLng(52.572177, -0.247192), 
      new google.maps.LatLng(52.572177, -0.347192),
      new google.maps.LatLng(52.522177, -0.347192)
            ],
    url: 'http://www.bbc.co.uk'  
  }

var allMapSquares;

function initialize() { 
  var myLatLng = new google.maps.LatLng(52.572177, -0.247192); 
  var mapOptions = { 
    zoom: 12, 
    center: myLatLng, 
    mapTypeId: google.maps.MapTypeId.TERRAIN 
  }; 

var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions); 

  for (var mapSquare in mapSquares) {
    var drawMapSquare = { 
      paths: mapSquares[mapSquare].coords, 
      strokeColor: "#FF0000", 
      strokeOpacity: 0.8, 
      strokeWeight: 3, 
      fillColor: "#FF0000", 
      fillOpacity: 0.35,
      map: map 
    }; 

    google.maps.event.addListener(drawMapSquare, 'click', function() {
         window.open(mapSquares[mapSquare].url,'_blank');
    });

    allMapSquares = new google.maps.Polygon(drawMapSquare);

  }

}
</script>

非常感谢!

4

2 回答 2

1

当您放入 for 循环并将 mapSquare 作为 mapSquares[] 数组变量的索引传递时,它采用最后一个值,因为 for 循环迭代到并且 mapSquare 的最后一个位置是最后一个,所以它会根据您的 for 循环始终占据最后一个位置,这就是您的原因总是最后一个链接

google.maps.event.addListener(drawMapSquare, 'click', function() {
     window.open(mapSquares[mapSquare].url,'_blank'); // here this will call when you click and at that time mapSqare position was last.
});
于 2012-10-05T11:03:25.417 回答
0

我也遇到了这个问题,简单的方法是:将实际创建InfoWindow的代码块放入单独的函数调用中。这实际上将避免全局和局部变量问题。

Pratik的回答中解释了原因。

于 2013-02-04T23:04:55.280 回答