繁体   English   中英

谷歌地图V3 dragend听众将所有标记添加回地图

[英]Google maps V3 dragend listener adds all markers back onto map

我有一个使用API​​的V3的谷歌地图。 它上面有一个标记,可以拖动,然后加载其他静态标记。 我为draggable标记设置了dragend监听器,它调用一个名为clear_markers()的函数,如下所示:

google.maps.event.addListener(marker_0, "dragend", function() {
    clear_markers();
});

function clear_markers()
{
  if (markers) {
    for (var i = 1; i <= markers.length; i++ ) {
        if(typeof markers[i] !== "undefined") {
            markers[i].setMap(null);
        }
    }
  }
}

我开始for循环1而不是0的原因是我的可拖动标记是第一个标记,所以我想清除地图上的所有标记,除了这个标记。

这是问题所在:

如果我调用clear_markers(); 以任何其他方式它工作正常,标记从地图中删除,所以像这样的工作:

$('#mybutton').click(function() {
    clear_markers();
});

当您拖放绿色标记然后从dragend侦听器调用它时它不起作用。 标记确实被删除但随后立即重新添加。 我知道它们确实被删除了,因为如果我在清除脚本的for循环之后将一些东西放在clear_markers()函数中,那么标记就会被删除。 但是如果脚本被允许继续,那么它们仍然存在意味着它们已被删除,然后立即重新添加。

我没有调用任何其他代码所以它似乎是api对我的错误。 有没有人有任何想法?

这是一个显示问题的工作示例:

https://tinker.io/64b68/1

删除markerClusterer。 它正在添加标记,您没有使用它。

更新:

由于您需要保留它,如果您希望不显示标记,则需要将它们从markerClusterer中删除:

 markerCluster.clearMarkers();

(但是你需要让它全局化才能以这种方式使用它)

您以正确的方式调用eventListener, 而不是在代码中的正确位置。 我在eventListener中添加了几个警报以查看发生了什么,如果您在第二个警报上看到,标记实际上已清除 - 但是一旦警报框关闭,标记就会重新出现。 亲自尝试一下:

google.maps.event.addListener(marker_0, "dragend", function() {
    alert("before calling clear_markers()");
    clear_markers();
    alert("markers should be cleared");
});

这意味着一旦javascript运行到你的“dragend”事件监听器,它将执行里面的代码 - 但是它也将遍历其余的代码,因此标记再次填充在地图上。 你可以通过在var markerCluster = new MarkerClusterer(map, markers, clusterOptions);之后将你的事件监听器添加到initialize()函数的末尾来解决这个问题var markerCluster = new MarkerClusterer(map, markers, clusterOptions);

斜体文本是错误的解释,请参阅下面的响应以获得正确的解决方案

/ ------------------------------------------------- -------------------------------------------- /

无视我之前的回答,请允许我重新编辑。 同样,您正在以正确的方式调用eventListener。 您只需要在侦听器函数中添加以下代码片段,以确保标记不会显示。

google.maps.event.addListener(marker_0, "dragend", function() {
    clear_markers();
    markerCluster.setMap(null);
});

似乎启动markerCluster会覆盖标记上的清除功能。 因此,您还需要从地图中清除markerCluster。 在我以前的回复中误导你的道歉,markerCluster对我来说也是一个新概念。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM