谷歌地图 - 自动完成&方向API - 触发onchange()下拉列表?

时间:2013-09-09 01:40:56

标签: google-maps google-maps-api-3 driving-directions

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

//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();" /> 

问题

如果我在这些输入中键入完整地址,那么一切都可以正常工作:

柏林,德国&amp;德国汉堡(我猜这是因为每个字母都会触发onchange())。

但是当我输入时:

柏林,德国,然后 Hamb&gt;从Google自动填充下拉列表中点击汉堡

它没有显示汉堡,它显示了一个名为Hamb的小镇。

有没有办法解决它?

screen

1 个答案:

答案 0 :(得分:1)

autocompleteTo = new google.maps.places.Autocomplete(
    (document.getElementById('end')),
    {types: ['geocode']}
);
google.maps.event.addListener(autocompleteTo, 'place_changed', function () {
    calcRoute();
});

在输入字段的每次更改时,触发place_changed事件会更有效,然后触发路由重新计算。