我使用的是API的谷歌地图。它上面有一个标记,可以拖动,然后加载其他静态标记。我为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对我的错误。有没有人有任何想法?
以下是一个显示问题的工作示例:
答案 0 :(得分:2)
删除markerClusterer。它正在添加标记,您没有使用它。
更新
由于您需要保留它,如果您不希望显示标记,则需要将它们从markerClusterer中删除:
markerCluster.clearMarkers();
(但你需要让它全局化才能使用它)
答案 1 :(得分:1)
以正确的方式调用eventListener,只是在代码中的正确位置。我在eventListener中添加了几个警报,看看发生了什么,如果你看到第二个警报,标记实际上已清除 - 但一旦警报框关闭,标记就会重新出现。亲自尝试一下:
google.maps.event.addListener(marker_0, "dragend", function() {
alert("before calling clear_markers()");
clear_markers();
alert("markers should be cleared");
});
这意味着一旦javascript运行到你的“dragend”事件监听器中,它就会执行里面的代码 - 但是它也将遍历其余的代码,因此标记会再次填充在地图上。您可以在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对我来说也是一个新概念。