0

我使用Google Maps JavaScript API製作了包含地圖的網站。我使用PHP從Google BigQuery數據庫調用$行。我想添加一個監聽器到地圖上的所有標記。目前任何點擊的標記都會跳轉到最終標記,就好像它將所有剩餘標記循環到最終標記一樣。將標記監聽器添加到循環中的所有標記中

foreach ($rows as $row) { 

      ?> 
      var contentString = "<h1><?php echo str_replace('"', "'", $row['f'][2]['v']); ?></h1>"; 
      var infowindow = new google.maps.InfoWindow({ 
       content: contentString 
       }); 

      var geolocate = new google.maps.LatLng(<?php echo $row['f'][0]['v']; ?> , <?php echo $row['f'][1]['v']; ?>); 

      var marker = new google.maps.Marker({ 
       map: map, 
       position: geolocate, 
       icon: '/img/Toilet.png', 
       title: "<?php echo str_replace('"', "'", $row['f'][2]['v']); ?>"      //String Replace 
       }); 

      marker.addListener('click', function() { 
       infowindow.open(map, marker); 
       }); 

我成像是marker.addListener需要一個指向數組的索引,但我不能工作了,我該怎麼辦?

+1

[谷歌地圖JS API V3 - 簡單多個標記的例子]可能重複(HTTP:// stackoverflow.com/questions/3059044/google-maps-js-api-v3-simple-multiple-marker-example) – geocodezip

+0

我試過這個修復,但我使用的是一個foreach循環,while循環的索引不會使感。 – EJackson

回答

1

您可以使用IIFE模式。請看看

https://en.wikipedia.org/wiki/Immediately-invoked_function_expression

在這種情況下,你的代碼將是這樣的:

<?php 
foreach ($rows as $row) { 
?> 
    (function() { 
     var contentString = "<h1><?php echo str_replace('"', "'", $row['f'][2]['v']); ?></h1>"; 
     var infowindow = new google.maps.InfoWindow({ 
      content: contentString 
     }); 

     var geolocate = new google.maps.LatLng(<?php echo $row['f'][0]['v']; ?> , <?php echo $row['f'][1]['v']; ?>); 

     var marker = new google.maps.Marker({ 
      map: map, 
      position: geolocate, 
      icon: '/img/Toilet.png', 
      title: "<?php echo str_replace('"', "'", $row['f'][2]['v']); ?>"      //String Replace 
      }); 

     marker.addListener('click', function() { 
      infowindow.open(map, marker); 
     }); 
    })(); 
<?php 
} 
?> 
相關問題