为什么setMap(null)不起作用google maps api v3?

P S*_*oud 7 google-maps google-maps-api-3 google-maps-markers

我正在使用google maps api 3.9.在app用户可以添加标记或删除标记.当用户点击地图时,将显示Infowindow.用户可以在其中输入名称,lat,long并单击保存图像,如下所示:

google.maps.event.addListener(map, 'click', function(event) {

  point = new google.maps.Marker({
    position: event.latLng
    , map: map
    , icon: 'resource/image/mapIcons/point.png'
    , id: id
    , type:"point"
  });

  type = point.type;
  newPoint = true;
  existingPoint = false;
  markerObj = this;

  inputInfowindow.setContent("<table style='width:92%;' id='inputTable'>" +
                             "<tr> <td>point</td> </tr>" +
                             "<tr> <td><input class='infoInput' type='text' id='name' placeholder='name'/> </td> </tr>" +
                             "<tr> <td><input class='infoInput'type='text' id='lat' placeholder='latitude'/></td> </tr>" +
                             "<tr> <td><input class='infoInput'type='text' id='lon' placeholder='longitude'/></td> </tr>" +
                             "<tr><td><input type='image' src='resource/image/mapIcons/save.png' onclick='save()' class='saveImage' alt='save'/> </td></tr>");

  event1 = event.latLng;
  currentMarker = point;
  inputInfowindow.open(map,point);

});
Run Code Online (Sandbox Code Playgroud)

标记保存在DB中.当用户在删除按钮上cllks时,将调用以下方法:

function deleteMarker(id,rev) {
  var marker  = markerObj;
  markerObj = undefined;
  var x = confirm("are you sure to delete marker?");
  if(x){
    deleteLocations(id,rev);//removes marker details from DB
    if(marker){
      console.log(marker);
      marker.setMap(null);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是在marker.setMap(null); 标记从地图中移除仍然在地图上.我用console.log(标记)检查; 标记对象正常,控制台没有错误.经过大量的谷歌搜索,但没有结果.请帮忙.

Cde*_*eez 13

从文件 -

要从地图中删除叠加层,请调用叠加层的setMap()方法,并传递null.请注意,调用此方法不会删除叠加层; 它只是从地图中删除叠加层.如果您希望删除叠加层,则应将其从地图中删除,然后将叠加层本身设置为null.

所以marker.setMap(null)你也应该写marker=null

Update1-

function deleteMarker(id,rev) {
  var x = confirm("are you sure to delete marker?");
  if(x)
  {
    deleteLocations(id,rev);//removes marker details from DB
    if(markerObj)
    {
       console.log(markerObj);
       markerObj.setMap(null);
       markerObj=null;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

更新2-

这是一个有效的简单演示.查看代码并检查代码错误的位置.您的代码中可能存在一些可变范围问题.

工作演示