2012-06-28 63 views
4

我有一個谷歌地圖使用V3的API。它有一個可拖動的標記,然後是靜態的其他標記。我已經建立了可拖動標記它調用一個函數調用clear_markers(一dragend監聽器),像這樣:谷歌地圖V3 dragend監聽器將所有標記添加到地圖上

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

的原因,我開始了在1循環,而不是0就是我拖動的標記是第一個標記所以我想清除地圖中除此之外的所有標記。

這裏的問題是:

如果我叫clear_markers();以任何其他方式能正常工作和標記從地圖上刪除,因此,像這樣的工作:

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

當你拖動,雖然下降的綠色標記,它是一個從dragend聽者這是行不通的調用。標記確實被刪除,但是他們立即再次添加。我知道它們會被刪除,因爲如果我在for循環殺死腳本後在clear_markers()函數中添加了某些內容,標記就會被刪除。但是如果腳本被允許繼續存在,它們仍然存在,這意味着它們已被刪除,然後立即再次添加。

我沒有調用任何其他代碼,所以它看起來像api給我的錯誤。有沒有人有任何想法?

下面是該問題的工作示例:

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

+0

您尚未提供足夠的信息來說明問題所在。發佈顯示問題的地圖鏈接,顯然系統中還有一些其他代碼會導致問題。 – geocodezip

+1

我已經發布了該鏈接,請參閱頁面底部的鏈接,以顯示所有JS和HTML – geoffs3310

+2

他很清楚地發佈了tinker.io的鏈接,顯示問題清晰,因爲它可以顯示 – Mike

回答

2

卸下markerClusterer。它正在添加標記,並且您沒有使用它。

更新:

,因爲你需要保留它,如果你想不被顯示的標記,你需要從markerClusterer刪除:

markerCluster.clearMarkers(); 

(但你需要做它是全球使用它的方式)

+0

我目前沒有使用它,但是在將來當網站填充更多數據時,我們會這樣做,只會是短期解決方案 – geoffs3310

+0

然後,您需要從markerclusterer中刪除標記或刪除markerclusterer從地圖停止顯示。它管理你的標記(在這種情況下你不需要)。 – geocodezip

+0

markerCluster.clearMarkers();非常感謝,我非常感謝我的頭髮! – geoffs3310

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」事件監聽器,它會內執行的代碼 - 但隨後將通過代碼的其餘部分,以及因此標記再次在地圖上填充。您可以通過在var markerCluster = new MarkerClusterer(map, markers, clusterOptions);之後將您的事件偵聽器添加到initialize()函數的末尾來解決此問題。

文本斜體字是錯誤的說明,請參閱下面的正確的解決方案

/響應--------------------- -------------------------------------------------- ----------------------/

不顧我以前的答案,讓我重新編輯。再次,您正確地調用eventListener。您只需要在偵聽器函數中添加以下代碼片段,以確保標記不顯示。

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

看來啓動markerCluster會覆蓋標記上的清除功能。因此,您還需要清除地圖中的markerCluster。在我之前的迴應中誤導你的道歉,markerCluster對我來說也是一個新概念。

+0

將來,如果您有任何觸發「清除」功能的eventListeners,請將其添加到代碼的末尾。 –

+0

這只是一個膚淺的修復,放大或縮小將再次重繪標記。重置聚合器的標記似乎是必要的。我懷疑實例化標記聚集器會改變偵聽器中的某些內容並覆蓋'clear_markers'。我不認爲「代碼的其餘部分」會再次運行,因爲使用原始代碼,我在「新MarkerClusterer」行之前放置了一個警報,並且警報不會彈出兩次。 –

+0

你是對的,它似乎啓動'MarkerCluster'確實做了一些有趣的覆蓋。然而,將地圖上的markerCluster設置爲null的標記類似將清除標記爲'markerCluster.setMap(null);'的標記。我會相應地編輯我的答案,謝謝你的收穫@MaryAnne –

相關問題