2012-12-31 38 views
2

我正在使用谷歌地圖api 3.9。在應用程序用戶可以添加標記或刪除marker.when用戶點擊地圖上將顯示一個Infowindow。用戶可以輸入名稱,經緯度和長按保存圖像如下:爲什麼setMap(null)不起作用google maps api v3?

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(空);標記從地圖上移除,仍然在地圖上。我用console.log(marker)查看;標記對象正常,沒有console.i錯誤經歷了很多谷歌搜索,但沒有result.Please幫助。

回答

11

從文檔 -

要從地圖上刪除疊加層,可調用疊加層的setMap()方法, 傳遞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-

下面是一個簡單的演示工程。查看代碼並檢查代碼錯誤的位置。代碼中可能存在一些可變範圍問題。

WORKING DEMO

+0

雅我試過兩個仍然沒有隱藏。我的版本是3.9 –

+0

看起來在代碼中有一些不需要的聲明。查看更新。 markerObj是否在這個函數中保存標記實例? – Cdeez

+0

雅我試過你的更新仍然result.is這個瀏覽器緩存問題 –

0

marker.setMap(null)不刪除對象,它只是隱藏它。要刪除它做marker = null;

+0

雅它沒有隱藏marker.still在地圖上。 –

+0

@P Srinivas goud,兩個都行! (marker.setMap(null)後跟mark = null;) – Marcelo

+1

雅我試過兩個仍然沒有隱藏。我的版本是3.9 –

0

在地圖上點擊事件分配到markerObj。雖然這個引用地圖對象而不是標記對象。

將其更改爲

markerObj = point; 

,並預期它應該工作。

+0

我試過,但仍然同樣的結果,當我重新加載頁面,並刪除現有的標記其工作正常。 –

0

我有一個類似的錯誤,我不知道如果我的解決方案適用於您的情況,但是..我設置我的代碼,以便當我的頁面加載時,地圖將填充任何標記從座標表示我的數據庫。然後,我允許用戶向數據庫中添加更多點,然後在地圖上的用戶所選位置添加一個標記。

我沒有意識到的是,任何時候在我的數據庫中更改或創建座標時,我的代碼都會將標記重新添加到地圖上的所有座標。所以,無論何時我創建了一個點,我都是手動向座標添加一個標記,並且我的數據庫正在向座標添加一個標記。所以當我認爲我的代碼被破壞時,真正發生的是我正在刪除同一位置中的兩個點之一。

所以我不確切知道你是如何從你的數據庫中獲取座標和標記的,但是值得研究。

相關問題