我一直致力于一个涉及Google Maps API的简单项目。我的朋友想要一个他的网站的访问者地图,访问者可以在其中放置代表其位置的标记。这些标记还与名称,消息等数据相关联。当单击标记时,此数据应显示在InfoWindow中。
到目前为止,它的所有工作都非常好,但是我遇到了一个让我难过的错误。
当用户放下新点时,将调用一个函数来生成特定于该对象的表单。
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。标记存储在哈希表中,可以使用此ID进行引用。
这里的问题来自取消按钮。按下时,它应该关闭InfoWindow,从地图中删除标记,并从哈希表中删除标记。为此,它调用函数removeMark,如下所示:
function removeMark(id){
infoWindow.close()
markers.id.mark.setMap(null);
delete markers.id;
}
但是,我收到一个类型错误,告诉我它无法读取未定义的属性标记。
在尝试调试代码时,我设置了一些断点,一个在setupForm
函数中,另一个在removeMark中。当单步执行代码时,我注意到在setupForm
中,js控制台将id
标识为字符串。但是在removeMark中,js控制台通知我id
突然变成了一个对象。
我无法弄清楚为什么会这样。 以下是所有代码:
感谢您的帮助!
答案 0 :(得分:1)
好吧......你的代码有三个问题......
首先,您在取消按钮的onclick声明中缺少围绕id的单引号。其次,你需要从removeMark函数返回false并在按钮上的onclick事件中返回removeMark ...(不需要超时)
CODE:
function setupForm(id){
var content='<div class="gdform">'+
'<form id='+id+'>'+
'<ul>'+
'<li><input type="text" id="userName" value="Whats your 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="return removeMark(\''+id+'\')"/>'+
'</form>'+
'</div>';
return content;
}
第三,删除标记时,需要使用数组中的括号来引用标记...
function removeMark(id){
infoWindow.close()
markers[id].mark.setMap(null);
delete markers[id];
return false;
}