我正在使用Google Place服务获取自动完成结果的地点详细信息。问题是在我的自动完成对象上执行getPlace()请求会为变量返回undefined(var place)。这个问题已经存在好几天了,无法上传。
错误:
TypeError:place is undefined [testdebug.php:232]
主要代码:
window['auto_'+inputFieldID+'_autocomplete'] = new google.maps.places.Autocomplete(document.getElementById(inputFieldID));
window['auto_'+inputFieldID+'_autocomplete'].bindTo('bounds', map);
var place = window['auto_'+GoogleMapItems[LoopIndex]+'_autocomplete'].getPlace();
if (!place.geometry)
{
console.log('cannot resolve rendering.');
}
感谢您的帮助。
答案 0 :(得分:1)
Closure问题:循环索引用作1(循环结束时的值)而不是0。
你可以使用闭包事件监听器的循环索引来修复它:
(function(LoopIndex) {
google.maps.event.addListener(window['auto_'+GoogleMapItems[LoopIndex]+'_autocomplete'], 'place_changed', function()
... {
});
})(LoopIndex);
这是一个修复。现在又出现了另一个问题:points is not defined
您正在使用变量points
,它似乎必须包含有关标记的信息。它没有在您的代码中定义。
更新:现在编写的代码仅将事件监听器设置为departure
自动填充。请参阅for
循环。唯一有效的索引是0.如果我加载页面并将例如s
写入出发输入,我可以选择例如悉尼,新南威尔士州,澳大利亚。选择后我进入控制台索引1(这是错误的),GoogleMapItems[LoopIndex]
返回arrival
(这是错误的)和places
是未定义的,这是正确的,因为在到达自动完成输入中没有任何内容。这是典型的关闭问题。
随着我的代码更改和离开自动填充的选择,我得到循环索引0,GoogleMapItems[LoopIndex]
返回departure
,我得到地方的完整信息,地图缩放到悉尼,代码失败,因为变量{{1未定义。
因此,必须在某处定义变量points
,并且必须扩展循环以处理页面的其他自动完成部分。