2014-01-24 78 views
1

我使用地理编码来允许用户导航到特定位置,然后将特定半径的标记添加到此导航点。如果用户再次点击该按钮并想要导航到另一个地方,则应该删除第一个请求的所有标记。我不得不说,导航点标有蓝色标记,其他标记有红色标记。我用这个代码来做到这一点:使用JavaScript再次点击按钮删除Google地图标记

// global 
var previousTarget = 0; 
var markers = new Array(); // All my markers are stored here 
// end global 

geocoder.geocode(
    {'address': address}, 
    function(results, status){   
     if(status == google.maps.GeocoderStatus.OK){ 
      map.setCenter(results[0].geometry.location); 
      marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location, 
       icon: 'http://maps.google.com/mapfiles/ms/micons/blue.png' 
      }); 

      var marker, i; 
      var splitted = locations.splitted(","); 

      for(var i = 0; i < splitted.length; i++){ 
       geocoder.geocode(
        {'address': splitted[i]}, 
        function(results, status){ 
         if(results != null){ 
          marker = new google.maps.Marker({ 
           map: map, 
           position: results[0].geometry.location 
          }); 

          markers.push(marker); 
          google.maps.event.addListener(marker, 'click', (function(marker, i){ 
           return function() { 
            $.ajax({ 
             url: 'myfile.php', 
             type: 'POST', 
             data: {addrData: jqXHR.responseText}, 
             success: function(datas, textStatus, jqXHR){ 
              for(var l = 0; l < markers.length; l++){ 
               if(marker == markers[l]){ 
                infowindow.setContent('test'); 
                infowindow.open(map, marker); 
               } 
              } 
             }, 

             error: function(jqXHR, textStatus, errorThrown){ 
              alert("Error"); 
             } 
            }); 
           } 
          })(marker, i)); 
         } 
        } 
       ); 

       if(previousTarget > 1){ // Here is the function to click the button twice 
        markers.setMap(null); 
       } 
      } 
     } 
    } 
); 

如果我这样做有通过点击按钮两次来在控制台中的错误:

Uncaught TypeError: Object [object Array] has no method 'setMap'

如果我只是改变markers到它删除蓝色标记。有人可以给我一个提示,我犯了一个错误吗?

+0

更多信息:https://developers.google.com/maps/documentation/javascript/examples/marker-remove – Swires

回答

3

你需要遍历你的标记数组并删除每个标记。对于MrUpsidown的答案可以在这里找到

for (var i=0; i<markers.length; i++) { 

    markers[i].setMap(null); 
} 
+0

刚刚意识到也许我应该早点把作为注释,为什么会你需要遍历每个(不好笑,只是不确定我是否错过了一些东西)。 – Swires

+0

因为每个'marker'都是你需要调用'setMap(null)'的对象,将它从地图上移除。这里'markers'只是一个拥有这些对象的数组。 – MrUpsidown

+0

谢谢你,我做了一些研究,并找到了我在上述评论中发布的链接,它建立了你的答案。在打字之前一定要学会思考:) – Swires

相关问题