我无法使用setMap(null)或setVisible(false)清除标记

时间:2012-12-03 21:27:42

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

基本上,我想让用户打开地图,在infowindow中创建一个具有融合表格的标记,然后让用户提交表单,然后关闭标记。

我正在处理的第一个问题是,在“点击”事件期间,似乎创建了2个标记/ infowindows。 (人们可以拖动顶级市场看到它下面还有另一个。)我不知道为什么。

但更大的问题是我不确定如何关闭用户创建的现有标记/ infowindows。

以下是我如何向地图添加标记的代码:

        // click listenrer that places a marker
     google.maps.event.addListener(map, 'click', function(event) { 
              placeMarker(event.latLng);
        });

      function placeMarker(location) {
          var newmarker = new google.maps.Marker({
         position: location,
       draggable: true,
        map: map,
     });
     var infowindow2 = new google.maps.InfoWindow({
          content: '<iframe width=500 height=300 scrolling=yes frameborder=no src=https://docs.google.com/spreadsheet/embeddedform?formkey=dGdMZjg1T2duck55UjVHNGx2MHRlN0E6MQ&entry_0=Test1&entry_1='+ location.lat() +','+ location.lng() +'&entry_2=test3%22></iframe>' 
        });

    infowindow2.open(map,newmarker);
    }

以下是无法清除标记的代码:

        // doesn't seem to work... 
    //I thought this is all that is needed for a market to disappear.  Neither setMap(null) or setVisible(false) works.  It doesn't appear that this listener is even triggered upon a double click.  
     google.maps.event.addListener(marker, "dblclick", function() {
        newmarker.setMap(null);
        marker.setVisible(false);
    });

我使用'dblclick'监听器来测试是否使用两个'click'监听器是问题。但据我所知,双击都没有任何反应。

对此的任何帮助或指导将不胜感激。

enter link description here

1 个答案:

答案 0 :(得分:3)

您的代码确实存在多个问题,修复您指出的问题还不够,但这是您的问题:

您的“dblclick”事件仅被添加到未定义的值“marker”。应该在placeMarker函数中移动“dblclick”侦听器,并将其更改为如下所示:

google.maps.event.addListener(newmarker, "dblclick", function() {
    alert('I clicked the map.');
    this.setMap(null);
    this.setVisible(false);
});

编辑:

还有一个问题,如果您单击地图一次,则会创建两个标记。因此,即使使用上述修复,您仍然需要双击两次才能删除标记。这是因为你的初始化函数被调用两次:一次来自body-onload,一次来自google maps domEvent for window-onload。

这是一个解决了两个问题的问题:

http://jsfiddle.net/vdmmJ/