【发布时间】:2016-10-10 12:50:04
【问题描述】:
我有一个 HTML 表单输入元素,它使用来自 Google Maps Places API 的 SearchBox 进行自动完成。在我的 JavaScript 中,我创建了一个 SearchBox 实例,如下所示:
var input = $('#spotsearch')[0]; // Refers to a form input with type="text" in my HTML
searchBox = new google.maps.places.SearchBox(input);
稍后在我的 JavaScript 中,我有以下内容:
$('#searchform').submit(function () {
var places = searchBox.getPlaces();
if (places) {
var spotLat = searchBox.getPlaces()[0].geometry.location.lat();
var spotLng = searchBox.getPlaces()[0].geometry.location.lng();
$('#latitude').val(spotLat);
$('#longitude').val(spotLng);
}
});
这是我的问题:选择完成候选后,当我通过单击表单的提交按钮提交表单时,一切都按预期工作,places 将引用具有单个对象的数组。但是,如果我通过按ENTER 提交表单,匿名函数仍会被调用,但places 返回一个空数组。在这两种情况下,发送的请求似乎完全相同。我在这里想念什么?
我是 JavaScript 和 Goggle Maps API 的新手,所以我不确定我的错误出在哪里。我的直觉是它可能在某种程度上与时间有关,但这实际上只是一种模糊的预感。任何建议,将不胜感激。谢谢!
编辑:
为了提供更多细节,这是我的整个脚本:
var searchBox;
var places;
function initSearchBox() {
var KCLatLng = new google.maps.LatLng({lat: 39.093201, lng: -94.573419});
var bounds = new google.maps.LatLngBounds(KCLatLng);
var input = $('#spotsearch')[0];
searchBox = new google.maps.places.SearchBox(input);
searchBox.setBounds(bounds);
$('#searchform').submit(function () {
var places = searchBox.getPlaces();
if (places) {
var spotLat = searchBox.getPlaces()[0].geometry.location.lat();
var spotLng = searchBox.getPlaces()[0].geometry.location.lng();
$('#latitude').val(spotLat);
$('#longitude').val(spotLng);
}
});
}
initSearchBox 然后在我加载 Goggle Maps API 时作为 callback 参数传递。
我也试过这样做:
var searchBox;
var places;
function initSearchBox() {
var KCLatLng = new google.maps.LatLng({lat: 39.093201, lng: -94.573419});
var bounds = new google.maps.LatLngBounds(KCLatLng);
var input = $('#spotsearch')[0];
searchBox = new google.maps.places.SearchBox(input);
searchBox.setBounds(bounds);
searchBox.addListener('places_changed', function() {
var places = searchBox.getPlaces();
if (places) {
var spotLat = searchBox.getPlaces()[0].geometry.location.lat();
var spotLng = searchBox.getPlaces()[0].geometry.location.lng();
$('#latitude').val(spotLat);
$('#longitude').val(spotLng);
}
});
}
但这给了我相同的结果(点击ENTER 不会设置#latitude 或#longitude 的值,但点击提交按钮可以)。
这是我的表单的 HTML(使用 Django 模板和 Bootstrap):
<form method="get" id="searchform" action="{% url 'spot_search' %}"
class="navbar-form navbar-left plain" role="search">
<div class="form-group">
<input id="spotsearch" type="text" class="form-control plain"
placeholder="Search spots" name="search_query">
</div>
<button type="submit" class="btn btn-default plain">
<span class="glyphicon glyphicon-search"></span> Search
</button>
<input id="latitude" name="latitude" type="hidden">
<input id="longitude" name="longitude" type="hidden">
</form>
【问题讨论】:
-
能否分享整个js代码。
-
@HectorBarbossa 我更新了我的帖子。
-
我们可能还需要 HTML。
-
@adam0101 也添加了!
标签: javascript jquery html forms google-maps