为什么的setMap(空)不工作谷歌地图API V3?(why setMap(null) is no

2019-08-05 03:48发布

我使用谷歌地图API 3.9。在应用程序的用户可以添加标记或在地图上的信息窗口会displayed.in,让用户可以输入姓名,纬度,经度删除marker.when用户点击,点击如下图片保存:

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);

});

标记保存在数据库中。 当删除按钮follwing方法用户cliclks会被调用:

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);
    }
  }
}

但在marker.setMap(空); 标记选自地图中删除静止其上map.I用的console.log检查(标记); 未来适当的标记物,对console.i没有错误,通过谷歌搜索很多,但这个没有result.Please帮忙去了。

Answer 1:

从文档 -

若要从地图覆盖,呼叫叠加层的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;
    }
  }
}

更新2-

下面是一个简单的演示工程。 查看代码并检查您的代码是错误的。 也许有些变量范围的问题在你的代码存在。

工作演示



Answer 2:

marker.setMap(null)不删除对象,它只是隐藏它。 要删除它做marker = null;



Answer 3:

在地图上点击事件分配这个到markerObj。 虽然指的是地图对象,而不是标记对象。

将其更改为

markerObj = point;

并预期它应该工作。



Answer 4:

我有一个类似的错误,我不知道如果我的解决方案适用于你的情况,不过..我建立了我的代码,使我的网页加载时的地图会从我的数据库中表示坐标的任何标记被填满。 然后,我允许用户以更多的点添加到数据库,然后添加一个标记,以用户选择的位置在地图上。

我没有意识到的是,任何时候的坐标被改变或创建我的数据库我的代码重新添加标记在我的地图上所有的坐标。 所以,任何时候我创建了一个点我既手动添加标记坐标和我的数据库添加标记坐标。 所以,当我想到我的代码被打破什么真正发生的事情是,我删除的两个点在同一个位置。

所以,我不知道究竟你是如何从你的数据库坐标和标志拉动,但它是值得研究的。



Answer 5:

我有同样的问题。 你应该叫之前这些方法markers[index].setMapp(null)

map.setCenter(desMarker[index].getPosition());
desMarker[index].setPosition(null);

这些调用后:

markers[index].setMapp(null)



文章来源: why setMap(null) is not working google maps api v3?