2014-02-08 41 views
0

我正在使用Google Place服务获取自动完成结果的地点详细信息。问题在于,对我的自动完成对象执行getPlace()请求会返回未定义的变量(var place)。现在已经围绕这个问题数日了,无法接受。Google Maps Javascript API v3函数getPlace()返回undefined

我的页面是:here和 我跟随的示例是here

错误:

类型错误:地方是未定义[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

关闭问题:循环指数作为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,我得到的地方完整的信息,地图放大到悉尼和代码失败,因为变量points是不确定的。

因此,必须在某处定义变量points,并且for循环必须展开以处理页面的其他自动填充部分。

+0

的确,这是一个JS特定的案例 - 更多细节可以在此页面找到:http://www.mennovanslooten.nl/blog/post/62。 **但是,这并不能解决我的问题,因为变量“place”仍然未定义**。我认为问题来自Autocomplete(),BindTO(),getPlace()与错误的Google Maps对象一起使用。 – Yann

+0

你在评论中写的是不正确的。我会更新我的答案以澄清。 –

+0

很好的答案,解决了我的问题!谢谢你的澄清。 – Yann

相关问题