我正在为出租车预订平台创建一个rails应用程序,需要输入一个接收点和一个放置点。为此,我在application.html.erb中包含了以下脚本:标题标记:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&libraries=places"></script>
<script type="text/javascript">
var placeSearch,autocomplete;
function initialize() {
autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), { types: [ 'geocode' ] });
google.maps.event.addListener(autocomplete, 'place_changed', function() {
fillInAddress();
});
autocomplete2 = new google.maps.places.Autocomplete(document.getElementById('autocomplete2'), { types: [ 'geocode' ] });
google.maps.event.addListener(autocomplete2, 'place_changed', function() {
fillInAddress();
});
}
function fillInAddress() {
var place = autocomplete.getPlace();
for (var component in component_form) {
document.getElementById(component).value = "";
document.getElementById(component).disabled = false;
}
for (var j = 0; j < place.address_components.length; j++) {
var att = place.address_components[j].types[0];
if (component_form[att]) {
var val = place.address_components[j][component_form[att]];
document.getElementById(att).value = val;
}
}
}
</script>
然后我在我的标签中使用了以下js:
<div class="field">
<%= label_tag ("Pickup Location: ") %><br>
<%= text_field_tag :pickup_loc, nil, :id => "autocomplete", :placeholder => "Enter your pickup location" %>
</div>
<div class="field">
<%= label_tag ("Drop Location: ") %><br>
<%= text_field_tag :drop_loc, nil, :id => "autocomplete2", :placeholder => "Enter your dropoff location" %>
</div>
虽然自动完成功能似乎有效,但自动填充功能的结果似乎是Google地图提供的结果的一部分。例如,当我在我的应用程序中将“Asian GPR ...”作为我的搜索查询时,它没有显示亚洲GPR Multiplex作为选项:
但是,当我在Google地图中使用相同的查询字符串时,我会得到所需的结果:
我试图在此搜索很多,但找不到解决方案。我哪里错了?
答案 0 :(得分:1)
如果您阅读the documentation here,则说:
类型数组指定显式类型或类型集合 在下面支持的类型中列出。如果没有指定任何内容,全部 返回类型。通常只允许一种类型。该 例外情况是您可以安全地混合地理编码和建立 类型,但请注意,这与指定no具有相同的效果 类型。
所以我想你只需要删除type选项,如下所示:
function initialize() {
autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'));
google.maps.event.addListener(autocomplete, 'place_changed', function() {
fillInAddress();
});
autocomplete2 = new google.maps.places.Autocomplete(document.getElementById('autocomplete2'));
google.maps.event.addListener(autocomplete2, 'place_changed', function() {
fillInAddress();
});
或者您可以添加建立类型:
function initialize() {
autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), { types: [ 'geocode', 'establishment' ] });
google.maps.event.addListener(autocomplete, 'place_changed', function() {
fillInAddress();
});
autocomplete2 = new google.maps.places.Autocomplete(document.getElementById('autocomplete2'), { types: [ 'geocode', 'establishment' ] });
google.maps.event.addListener(autocomplete2, 'place_changed', function() {
fillInAddress();
});