1

Google マップ上にポリゴン オーバーレイを作成しようとしましたが、クリックすると新しいウィンドウで別の Web ページにリンクされます。ただし、最後に生成されたポリゴンの 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 ループに入れて mapSquares[] 配列変数のインデックスとして mapSquare を渡すと、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

私もこの問題に遭遇しました。簡単な方法は、実際にインフォウィンドウを作成するコードブロックを配置し、イベントリスナーを別の関数呼び出しに追加することです。これにより、グローバル変数とローカル変数の問題が実際に回避されます。

その理由はPratikの答えで説明されています。

于 2013-02-04T23:04:55.280 に答える