setMap(null)不起作用

时间:2018-06-10 16:30:49

标签: javascript google-maps google-maps-api-3

我试图通过ajax请求从地图中删除标记。

ajax请求看起来像这样。

    $(document).on('click','.deletebtn',function(){

        var theid =$(this).parent().attr("id");
          var obj = {
              id:theid
          }
          $.ajax({
              url:"http://localhost:3000/singleMarker",
              method:"post",
              contentType:"application/json",
              data:JSON.stringify(obj),
              dataType:"JSON",
              processData: true,
              success:function(responseData){
                  clearMarker(responseData);
              }
          });

    });

回复将以单个obj {id:id,{lat:xxx,lng:yyy}}

回复

接下来我将lat lng数据转换为标记obj:

    var clearMarker = function(responseData){
    //clearAll Markers from Map
    var markers =[];
    var temp ={};
    var marker;
    for(var key in responseData){
        //create markers with latlng objs
        temp ={lat:responseData[key].pos.lat,lng:responseData[key].pos.lng};
        marker = new google.maps.Marker({
            position:temp,
            map:meineMap
        });
        markers.push(marker);
    }
    setMapOnAll(null,markers);
}

然后使用map null的setMapOnAll应删除地图中的所有标记,但不会这样做。为什么?

function setMapOnAll(map,markers) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(null);
    //markers[i].setVisible(false);

  }
}

1 个答案:

答案 0 :(得分:0)

如果您只有一个标记,则无需维护标记数组(或调用setMapOnAll),将marker声明移出clearMarker函数,如果标记存在,请将其map属性设置为null,否则,它是第一个标记,只需创建它。

var marker;
var clearMarker = function(responseData){
    //clearAll Markers from Map
    var temp ={};

    for(var key in responseData){
        //create markers with latlng objs
        temp ={lat:responseData[key].pos.lat,lng:responseData[key].pos.lng};
        if (marker && marker.setMap) marker.setMap(null);
        marker = new google.maps.Marker({
            position:temp,
            map:meineMap
        });
    }
}