【问题标题】:Google Maps Javascript API v3 function getPlace() returns undefinedGoogle Maps Javascript API v3 函数 getPlace() 返回未定义
【发布时间】:2014-03-05 21:11:12
【问题描述】:

我正在使用 Google Place 服务来获取地点详细信息,以获取来自自动完成的结果。问题是对我的自动完成对象执行 getPlace() 请求会返回未定义的变量(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.');
}

感谢您的帮助。

【问题讨论】:

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


    【解决方案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 循环以处理页面的其他自动完成部分。

    【讨论】:

    • 确实,这是一个特定于 JS 的案例 - 更多细节可以在这个页面上找到:mennovanslooten.nl/blog/post/62但是,这并不能解决我的问题本身,因为变量“place”仍未定义。我认为问题来自 Autocomplete()、BindTO()、getPlace() 与错误的 Google Maps 对象一起使用。
    • 你在评论中写的不是真的。我将更新我的答案以澄清。
    • 很好的答案解决了我的问题!谢谢你的澄清。
    猜你喜欢
    • 2013-11-12
    • 2011-02-19
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多