Мой слегка измененный код, описанный Майклом выше, который, к сожалению, не работает "из коробки". Мне кажется, важно подчеркнуть это, потому что Google приводит меня к этому сообщению, когда я ищу "скрытые поля геокодирования на стороне клиента". Я беру следующий код прямо с моего сайта, который использует $ _GET, но он работает в любом случае. Начнем с формы:
<form type="get" id='codeForm' action='index.php'>
<input type='text' name='search_location' id='search_location'>
<input type='text' name='search_term'>
<input type="submit" value="Search" id="submitform">
<input type='text' name='search_term'>
</form>
Как видите, я забрал скрытые поля ввода lat и lng из формы и добавил их с помощью jquery ниже:
<script type="text/javascript">
function codeAddress() {
myForm = document.forms["codeForm"];
//get the address
var geocoder = new google.maps.Geocoder();
var address = document.getElementById('search_location').value;
geocoder.geocode({'address': address, componentRestrictions:{country:"uk"}}, function(results, status) {
//geocode was successful
if (status == google.maps.GeocoderStatus.OK) {
//grab the lat and long
var lat = results[0].geometry.location.lat();
$("#codeForm").append("<input type='hidden' name='lat' value='" + lat + "' />");
var lng = results[0].geometry.location.lng();
$("#codeForm").append("<input type='hidden' name='lng' value='" + lng + "' />");
//submit form
} else {
//geocode failed
alert("Geocode was not successful for the following reason: " + status);
}
});
}
$(document).ready(function() {
$('#codeForm').submit(function(e) {
var form = this;
e.preventDefault();
codeAddress();
setTimeout(function () {
form.submit();
}, 1000); // in milliseconds
return false;
});
});
</script>
Важным моментом в моем коде является то, что я добавил задержку setTimeout, благодаря этому посту на SO. Без задержки я обнаружил, что значения в решении Михала выше не добавляются вовремя.
Как сноска, я знаю, что могу улучшить сочетание javascript и jquery в своем решении, но важно, что это рабочий пример, и каждый может изменить его, если пожелает.