我一直在研究一个涉及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