如何判断何时未使用谷歌位置自动完成建议?

Posted

技术标签:

【中文标题】如何判断何时未使用谷歌位置自动完成建议?【英文标题】:How to tell when google places autocomplete suggestion was not used? 【发布时间】:2012-12-25 16:57:17 【问题描述】:

短版:

我正在使用来自 Google Places Library(此处为 https://developers.google.com/maps/documentation/javascript/places)的 google 自动完成地点,我需要知道用户何时从自动完成列表中选择了一个地点,以及他们何时点击了其他地方、标签页等.

我的目标是在用户与输入元素交互但没有选择自动完成选项时运行一个函数。

更多细节:

在查看文档时,似乎唯一的事件是在(真的,如果)地点发生变化时触发,这发生在(可能很长的)服务器往返之后。如果用户没有从列表中选择任何内容,则永远不会触发该事件。 (文档https://developers.google.com/maps/documentation/javascript/reference?hl=fr#Autocomplete)

我可以为自动完成附加到的输入元素的 blur 事件附加一个侦听器,但问题是 blur 事件发生在 places_changed 事件发生之前。

到目前为止,已经尝试了很多方法,包括在自动完成建议中监听事件,如下所示:

$('body').on('click', '.pac-item', function()alert.log('yay!'););

谷歌图书馆显然吃掉了这些事件。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

您应该检查表单何时提交,而不是使用事件进行检查。这是一步一步的:

    当用户选择地点时,存储地点和输入的文本值 表单提交时,检查输入的值是否和你保存的一样 如果不同,或者没有保存位置,则执行手动位置请求

演示:http://jsfiddle.net/robertdodd/FSRd8/7/

我在上面整理了一个小演示。我所做的是将验证方法附加到表单。该方法会在提交表单前检查数据,如果需要先手动查找。

function validateForm() 
    searchfield = $('#searchfield').val();
    if (searchfield == "" || searchfield == null)  
        // No text entered
     else if (place && searchfield == placesearch)  
        // Success
        return true;
     else  
        // place info and search text do not match, perform manual lookup   
        // when lookup is complete, the callback function will store the place info
        // and resubmit the form
    
    return false;

这只是一个概述,所有代码都在演示中,如果你想看的话。

希望对你有帮助!

【讨论】:

很好的答案,不幸的是,小提琴给出了错误 404。 @rara_tiru 我现在修复了链接,感谢您告诉我! 这行不通,如果我随机输入一些内容,则无法正确验证

以上是关于如何判断何时未使用谷歌位置自动完成建议?的主要内容,如果未能解决你的问题,请参考以下文章

查找谷歌地方自动完成时返回零结果

谷歌自动完成 - 输入选择

单击谷歌浏览器自动完成建议后如何设置文本输入样式?

谷歌地图放置自动完成加载事件

如何判断 UIWebView 何时完成渲染(未加载)?

如何判断 FB.init() 何时完成?如何判断用户何时未连接应用程序启动?