Google Places API:未触发place_changed

时间:2016-10-21 12:48:37

标签: javascript google-maps google-places-api

我遇到问题,包括Google Places API。我已经使用API​​密钥设置了所有内容,列表/建议工作正常,但是当我选择建议时,place_changed事件不会被触发。

检查小提琴:https://jsfiddle.net/xj2d77be/3/

它应该有效,但我完全不知道它为什么没有。

代码段(来自发布的小提琴):

$(document).ready(function() {
  var autocomplete = new google.maps.places.SearchBox(document.getElementById('mapLocation'));
  google.maps.event.addListener(autocomplete, 'place_changed', function() {
    var place = autocomplete.getPlace();
    console.log(place);
  });
  console.log("Initialized")
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.google.com/maps/api/js?libraries=places"></script>
<input type="text" id="mapLocation" />

3 个答案:

答案 0 :(得分:2)

尝试这个,这将有效,我已经更新了你的代码,

https://jsfiddle.net/xj2d77be/4/

$(document).ready(function() {
    var autocomplete = new google.maps.places.Autocomplete($("#mapLocation")[0]);
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            var place = autocomplete.getPlace();
            console.log(place);
        });
    console.log("Initialized")
});

使用SearchBox:

https://jsfiddle.net/xj2d77be/5/

$(document).ready(function() {
    var searchBox = new google.maps.places.SearchBox(document.getElementById('mapLocation'));
        searchBox.addListener('places_changed', function() {
            var place = searchBox.getPlaces();
            console.log(place);
        });
    console.log("Initialized")
});

答案 1 :(得分:0)

SearchBox没有“place_changed”事件或.getPlace()函数。它应该是“places_changed”和.getPlaces()

Documentation:

  

<强>方法

     

getPlaces()返回值:数组

     

返回用户选择的查询,如果尚未找到任何位置,则返回null,以与places_changed事件一起使用。

     

<强>事件

     

places_changed 参数:无

     

当用户选择查询时会触发此事件,应使用getPlaces获取新位置。

注意: .getPlaces()函数返回一个数组而不是一个地方。

$(document).ready(function() {
  var autocomplete = new google.maps.places.SearchBox(document.getElementById('mapLocation'));
  google.maps.event.addListener(autocomplete, 'places_changed', function() {
    var place = autocomplete.getPlaces();
    console.log(place);
  });
  console.log("Initialized")
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.google.com/maps/api/js?libraries=places"></script>
<input type="text" id="mapLocation" />

答案 2 :(得分:0)

对我来说,@Transactional(dontRollbackOn = {SomeRuntimeException.class} public void doSomething(){ ... Query query = this.getEntityManager().createQuery(...); query.setParameter(...); queryResult = query.getSingleResult(); } 事件会在我刷新页面之前触发,然后它就不会再触发(在本地网页上使用Google Chrome)。您必须重新启动Chrome或关闭开发人员工具并刷新页面才能再次触发该事件。