12

精简版:

我正在使用 Google Places Library(此处为https://developers.google.com/maps/documentation/javascript/places)中的 google 自动填充位置,我需要告诉用户何时从自动完成列表中选择了一个位置当他们点击其他地方,标签等时。

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

更多细节:

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

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

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

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

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

任何帮助将不胜感激。

谢谢!

4

1 回答 1

7

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

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

演示: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;
}

这只是所发生的事情的概要,如果您想查看,所有代码都在演示中。

我希望这可以帮助你!

于 2013-02-03T22:50:13.583 回答