(整个 jsfiddle 在这里http://jsfiddle.net/hlassiege/zbuJb/8/)
你好,
我正在使用 google maps api v3 并尝试对用户提供的地址进行地理编码。用户可以在文本字段中写下城市名称,gmap api 会自动提出一些建议:
当用户选择某些内容时,我对结果进行地理编码并在另外两个文本字段上显示纬度/经度:
当用户用鼠标选择城市时,这很容易。我只需要赶上事件:
google.maps.event.addListener(autocomplete, 'place_changed', function () {
var place = autocomplete.getPlace();
if (!place.geometry) {
resetLatLon(inputLat, inputLong, input);
return;
}
inputLat.value = place.geometry.location.lat();
inputLong.value = place.geometry.location.lng();
});
如果用户输入“TAB”以移动到另一个字段,我会收听此事件并尝试手动进行地理编码:
function tryGeocoding(inputLat, inputLong, input, geocoder) {
var address = input.value;
resetLatLon(inputLat, inputLong, input);
// try to call geocoding manually
geocoder.geocode({ 'address': address}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
// pick up the first result, maybe not accurate but better that nothing
input.value = results[0].formatted_address;
inputLat.value = results[0].geometry.location.lat();
inputLong.value = results[0].geometry.location.lng();
}
});
}
$('#location, #city').keydown(function(e) {
// is user press TAB
if (e.which === 9 ) {
tryGeocoding(inputLat, inputLong, input, geocoder);
return true;
}
});
有用。
但是,如果用户按 ENTER,我尝试了相同的逻辑,但它不起作用:
$('#location, #city').keydown(function(e) {
// if user press ENTER, the event is not triggered and the location is not correct
if (e.which === 13 ) {
tryGeocoding(inputLat, inputLong, input, geocoder);
return true;
}
});
编辑:这并不容易。有时,它有效,有时则无效。我真的不明白为什么当我按 ENTER 时地理编码有时会失败但随机成功