Если вы отмените отправку формы по умолчанию, а затем отправите ее самостоятельно из функции обратного вызова вызова геокодирования, это должно сработать.
Вместо того, чтобы обрабатывать нажатие кнопки, обработайте событие отправки формы, убедившись, что возвращено false, чтобы отменить отправку по умолчанию (в этом случае я возвращаю результат функции, поэтому убедитесь, что функция возвращает false ):
<form onsubmit="return codeAddress(this);">
<script>
var geocoder;
geocoder = new google.maps.Geocoder();
function codeAddress(theForm) {
var address = document.getElementById("place_name").value;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
document.getElementById("place_coordinates").value = results[0].geometry.location;
theForm.submit();
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
return false;
}
</script>
Обратите внимание, что я поместил отправку формы в ветку OK вашего if / else, поэтому форма не будет отправлена, если геокод был неудачным. Очевидно, что вы можете переместить это в другой случай, но все еще в функции обратного вызова, если хотите продолжить и отправить в любом случае.
Кроме того, обратите внимание, что я передаю ссылку на форму в функцию - вам не нужно это делать, но я думаю, что она аккуратнее.