我一直在研究一個涉及Google Maps API的簡單項目。我的朋友需要訪問者的地圖,訪問者可以在其中放置代表他們位置的標記。這些標記還與名稱,消息等數據相關聯。單擊標記時,此數據應顯示在InfoWindow中。Javascript字符串意外轉向對象
到目前爲止,它的所有工作都很好,但是我遇到了一個讓我難過的bug。
當用戶放下新點時,會調用一個函數來生成該對象特定的表單。
function setupForm(id){
var content='<div class="gdform">'+
'<form id='+id+'>'+
'<ul>'+
'<li><input type="text" id="userName" value="name" onfocus="value=\'\'"/></li>'+
'<li><textarea rows ="15" cols="50" wrap="hard"></textarea></li>'+
'</ul>'+
'<input type="button" value="submit" onclick="markers.'+id+'.setData()"/>'+
'<input type="button" value="cancel" onclick="setTimeout(function(){removeMark('+id+')}, 100)"/>'+
'</form>'+
'</div>';
return content;
}
其中id
是地圖上每個標記的唯一標識。這些標記存儲在一個散列表中,並可以用這個ID引用。
這裏的問題來自取消按鈕。按下時,它應該關閉InfoWindow,從地圖上移除標記,並從哈希表中刪除標記。要做到這一點,它調用函數removeMark,它看起來像這樣:
function removeMark(id){
infoWindow.close()
markers.id.mark.setMap(null);
delete markers.id;
}
然而在這裏,我收到一個類型的錯誤告訴我它無法讀取的未定義的屬性標誌。
在嘗試調試代碼時,我設置了一些斷點,一個在setupForm
函數中,另一個在removeMark中。在單步執行代碼時,我注意到,在setupForm
中,js控制檯將id
識別爲字符串。但是,在removeMark中,js控制檯通知我,id
突然成爲對象。
我一直無法弄清楚爲什麼這應該是。 這裏是所有代碼:
感謝您的幫助!
你setTimeout調用是錯誤的。第一個參數應該是一個函數,而不是函數調用。 – ThiefMaster
啊,好吧,我不知道你不能這麼做......我已經改成setTimeout(function(){removeMark('+ id +')},100)'。然而,我仍然有與成爲一個對象的字符串相同的問題... – danem