Вы используете обратный вызов неправильно, из-за чего нужно использовать setTimeout
. Также функция $.submit()
происходит перед фактическим представлением формы. Вероятно, поэтому значение входов сбрасывается каждый раз.
Пожалуйста, обратитесь к .submit и .post и проверьте, какой из них соответствует вашим потребностям.
Кроме того, вы можете отказаться от отправки формы и получить что-то вроде этого (не проверено):
У вас есть кнопка для запуска события:
<input type="button" name="submitBtn">
Когда пользователь нажимает на это, он устанавливает значения входных данных:
$('#submitBtn').click(function () {
var address = "new york"; // or an input value
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
$("input[name=latitude]").val(latitude);
$("input[name=longitude]").val(longitude);
}
});
});
Нет необходимости устанавливать тайм-аут, так как сама функция обратного вызова будет вызываться после возврата ответа. Если, конечно, вам нужен тайм-аут для какой-то другой цели - например, callback(false)
делает что-то еще.
Отказ от ответственности: я не знаком с API геокодера.
EDIT:
Если вы не хотите редактировать HTML, вы можете вместо этого ввести переменную.
var isCallBack = false;
$('#simplr-reg').submit(function(event)
{
if (!isCallBack) {
$("input[name=latitude]").val(9999); // set default values
$("input[name=longitude]").val(9999);
event.preventDefault();
codeAddress();
} else
isCallBack = false; // may not be required if the page refreshes
});
function codeAddress()
{
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
$("input[name=latitude]").val(latitude);
$("input[name=longitude]").val(longitude);
isCallBack = true;
$('#simplr-reg').trigger('submit');
}
});
} // end of code address