Google Maps Javascript API v3函数getPlace()返回undefined

时间:2014-02-08 10:42:40

标签: javascript php google-maps google-maps-api-3

我正在使用Google Place服务获取自动完成结果的地点详细信息。问题是在我的自动完成对象上执行getPlace()请求会为变量返回undefined(var place)。这个问题已经存在好几天了,无法上传。

我的页面是:here,和 我关注的例子是here

错误:

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.');
}

感谢您的帮助。

1 个答案:

答案 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,并且必须扩展循环以处理页面的其他自动完成部分。