Google Maps - Autocomplete & Directions API - 触发下拉列表的 onchange()?

Posted

技术标签:

【中文标题】Google Maps - Autocomplete & Directions API - 触发下拉列表的 onchange()?【英文标题】:Google Maps - Autocomplete & Directions API - trigger onchange() for dropdown list? 【发布时间】:2013-09-09 01:40:55 【问题描述】:

我有谷歌地图和两个输入。它们都使用自动完成功能,如下所示:

//first input autocomplete

var input1 = (document.getElementById('start'));
var autocomplete1 = new google.maps.places.Autocomplete(input1);

autocomplete1.bindTo('bounds', map);

//second input autocomplete

var input2 = (document.getElementById('end'));
var autocomplete2 = new google.maps.places.Autocomplete(input2);

autocomplete2.bindTo('bounds', map);

填写完这两个输入后,我将使用 Directions API 显示它们之间的最短路径:

function calcRoute() 
  var start = document.getElementById("start").value;
  var end = document.getElementById("end").value;
  var request = 
    origin:start,
    destination:end,
    travelMode: google.maps.TravelMode.DRIVING
  ;
  directionsService.route(request, function(result, status) 
    if (status == google.maps.DirectionsStatus.OK) 
      directionsDisplay.setDirections(result);
    
  );

我的输入如下所示:

<input type="text" id="start" onchange="calcRoute();" />
<input type="text" id="end" onchange="calcRoute();" /> 

问题

如果我在这些输入中输入完整地址,一切都会正常工作,例如:

德国柏林和德国汉堡(我猜这是因为输入的每个字母都会触发 onchange())。

但是当我输入时:

柏林,德国,然后 Hamb > 从 Google 自动完成下拉列表中点击 Hamburg

它没有显示汉堡,它显示了一个叫汉布的小镇。

有什么办法可以解决吗?

【问题讨论】:

【参考方案1】:
autocompleteTo = new google.maps.places.Autocomplete(
    (document.getElementById('end')),
    types: ['geocode']
);
google.maps.event.addListener(autocompleteTo, 'place_changed', function () 
    calcRoute();
);

侦听 place_changed 事件比在输入字段的每次更改时触发路线重新计算要高效得多。

【讨论】:

不仅效率更高,而且确实是利用自动完成功能的唯一方法。否则,您将路由到/从到目前为止输入的使用,而不是自动完成建议的。在此过程中,请考虑路由到/从地点的地点 ID,如 developers.google.com/maps/documentation/javascript/examples/…

以上是关于Google Maps - Autocomplete & Directions API - 触发下拉列表的 onchange()?的主要内容,如果未能解决你的问题,请参考以下文章

google maps 单击标记点作为地图中心

google.maps.places.Autocomplete 语言输出

html [Google Maps]可自定义的Google Maps脚本,用于嵌入网站#js

在 maps.google.com 上的缩放比在 Google Maps API v3 上更流畅

无法通过 gradle 导入 com.google.maps.android:android-maps-utils

Google Maps v3和JQuery选项卡(JQuery选项卡Google Maps bug)