Google地图自动搜索页面加载

时间:2014-06-27 12:39:09

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

我在我的网页上使用Google Maps API v3,目前当页面加载时,搜索框会预先填充我选择的搜索字词。但我需要它实际上然后使用该术语搜索地图。我似乎无法使用谷歌的API找到任何方法,所以我想也许我可以模拟一个'输入'按键使用此代码:

var e = jQuery.Event("keydown");
e.which = 13;
$("#pac-input").trigger(e);

#pac-input是地图上<input>标记的ID)

然而,这似乎并不奏效。

那么如何强制搜索页面加载?

修改 这是我正在谈论的搜索框 enter image description here

2 个答案:

答案 0 :(得分:7)

您必须考虑的第一件事是不必触发哪个事件,了解何时来触发事件更为重要。

预测将以异步方式加载,因此您必须等到它们可用。当预测可用时,不会触发任何事件,但您可能会观察到DOMNodeInserted - 身体的事件(将在那里插入下拉列表)并检查节点是否具有className&#39; pac-item& #39; (它是下拉列表中项目的className)。

然后必须在输入上触发这些事件:

  1. keydown使用keyCode:40  (移至下拉列表中的第一个预测)
  2. keydown使用keyCode:13  (选择/激活预测)
  3. focus  (激活输入)
  4. keydown使用keyCode:13  (发送请求)
  5. 示例:

      var input          =  document.getElementById('pac-input'),
          ac              = new google.maps.places.SearchBox(input),
          itemsloaded    =  google.maps.event
                              .addDomListener(document.body,
                                              'DOMNodeInserted',
                                              function(e){ 
                                if(e.target.className==='pac-item'){
                                  //remove the listener
                                  google.maps.event.removeListener(itemsloaded);
                                  //trigger the events
                                  google.maps.event.trigger( input, 'keydown', {keyCode:40})
                                  google.maps.event.trigger( input, 'keydown', {keyCode:13})
                                  google.maps.event.trigger( input, 'focus')
                                  google.maps.event.trigger( input, 'keydown', {keyCode:13})
                                }
                              });
    

    注意:在InternetExplorer中,自V9起支持DOMNodeInserted - 事件,在旧版本和其他不支持此事件的浏览器中,如果有,则可以间隔检查.pac-item出现在文件中。

    演示:http://jsfiddle.net/doktormolle/R8XdL/

答案 1 :(得分:0)

如果您的用例允许,最简单的(并且可能是谷歌打算)这样做的方法是存储googles place_id,然后使用新的google.maps.places.PlacesService.getDetails方法进行查询

var service = new google.maps.places.PlacesService(map);
service.getDetails({placeId: $('[name="google_places_id"]').val()}, function(place, status) { do code here });
相关问题