Сначала вы хотите изменить код обработчика onclick, добавив в него оператор возврата, например:
<input type="submit" value="My Button" onclick="javascript:return DoSomething();" />
Затем измените функцию DoSomething, чтобы она возвращала значение false, чтобы sumit был отменен, если он работает с асинхронным обратным вызовом. И измените асинхронный обратный вызов, чтобы отправить форму после завершения.
function DoSomething(doPost)
{
var geocoder = new GClientGeocoder();
geocoder.getLocations(map.getCenter(), function SetField(response)
{
if (!response || response.Status.code != 200)
{
alert("Status Code:" + response.Status.code);
}
else
{
var place = response.Placemark[0];
$('#someHiddenField')[0].value = place.AddressDetails.Country.CountryNameCode;
// resubmit the form here
$('#yourFormID').submit();
}
});
return false; // cancel the submitting of the form
}
Еще один подход заключается в том, чтобы включить в вашу форму обработчик onSubmit и использовать глобальный флаг, чтобы определить, разрешена ли отправка формы (т. Е. Если асинхронный режим отсутствует) обратный звонок еще в полете). Когда асинхронный обратный вызов вернется, вы очистите флаг и повторно отправите форму из javascript, как я продемонстрировал выше, вызывая метод submit () для элемента формы .