2011-05-17 64 views
3

在我的HTML5移動應用我用一些jQuery來隱藏或顯示這取決於用戶是否登錄或沒有一些自定義的控件:無法刪除自定義的控制,從谷歌地圖

基本的代碼是下列操作之一:
- >一個函數'createCustomControls'負責多次調用另一個函數'createCustomControl'(不帶's')。

function createCustomControls(map){ 
    createCustomControl("about", map); 
    if(!authenticated()){createCustomControl("login", map);} 
    if(authenticated()){ createCustomControl("menu", map);} 
    if(authenticated()) {createCustomControl("list", map);} 
} 

function createCustomControl(type, map){ 
    // Create a div to hold the controls 
    var controlDiv = document.createElement('DIV'); 
    controlDiv.style.padding = '2px'; 
    controlDiv.index = 1; 

// Set CSS for the control border 
var controlUI = document.createElement('DIV'); 
controlUI.style.backgroundColor = '#FFF'; 
controlUI.style.borderStyle = 'solid'; 
controlUI.style.borderWidth = '1px'; 
controlUI.style.cursor = 'pointer'; 
controlUI.style.textAlign = 'center'; 
controlUI.title = type.capitalize(); 
controlDiv.appendChild(controlUI); 

// Set CSS for the control interior 
var controlText = document.createElement('DIV'); 
controlText.style.fontFamily = 'Arial,sans-serif'; 
controlText.style.fontSize = '18px'; 
controlText.style.paddingLeft = '4px'; 
controlText.style.paddingRight = '4px'; 
controlText.innerHTML = type.capitalize(); 
controlUI.appendChild(controlText); 

// Add event listener on click 
if(type == "list"){ 
    google.maps.event.addDomListener(controlUI, 'click', function() { 
    ....some stuff 
    }); 
} 
if((type == "menu") || (type == "login") || (type == "about")){ 
    google.maps.event.addDomListener(controlUI, 'click', function() { 
    $.mobile.changePage("#" + type, "slideup"); 
    }); 
} 

// Add control to map 
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controlDiv); 
} 

這正常工作,我第一次叫「createCustomControls」:
- >「登錄」和「關於」創建自定義的控件。

當用戶登錄時,我再次調用'createCustomControls'函數。它將'login'和'about'旁邊的自定義控件(菜單,列表,關於)推到一起。

我試過幾件事情要清除TOP_RIGHT位置插入「菜單」,「列表」和「關於」問題之前擺脫「登錄」和「關於」的控制,但沒有工作....

任何想法?

+0

你嘗試過什麼辦法呢?它應該只是一個調用map.controls [position] MVCArray的removeAt(index)與要刪除的控件的索引的問題。 – 2011-05-18 19:53:02

+0

另一種效率較低的方法是map.controls [google.maps.ControlPosition.TOP_RIGHT] .clear(),然後添加所需的控件。 – 2011-05-18 19:54:39

回答

2

map.controls [position]是一個MVCArray。使用removeAt()或clear()應該完成任務。

http://code.google.com/apis/maps/documentation/javascript/reference.html#MVCArray

+0

@ ryan-olds我試着用removeAt(index)但我沒有成功,我會再試一次並提供錯誤信息。我會盡量清楚。非常感謝,Luc – Luc 2011-05-18 21:59:40

+0

@ ryan-olds是的!謝謝它工作正常,清晰()! – Luc 2011-05-18 22:02:42

+0

當您嘗試removeAt()時,您通過了什麼索引? – 2011-05-18 22:06:32

3

我使用這個代碼,以查找特定的控制(以元素的id 'mapHintDiv'):

var indexOfControl = null, 
    bottomCenterControls = map.controls[google.maps.ControlPosition.BOTTOM_CENTER]; 
bottomCenterControls.forEach(function (element, 
             index) { 
    if(element.id === 'mapHintDiv') { 
     indexOfControl = index; 
    } 
}); 
if(indexOfControl) { 
    bottomCenterControls.removeAt(indexOfControl); 
} 
+0

爲什麼沒有內置的方式來做到這一點,我不知道; o) – 2013-06-18 19:06:25