我正在使用jQuery表单插件在提交表单之前调用函数。 此函数调用google geocoder service,查找地址的坐标,并在表单中设置隐藏坐标字段的值。 似乎在beforeSubmit回调完成之前提交了表单。这是正常的吗?表单是否应该等待beforeSubmit回调完成? 最好的方法是什么?
由于
的javascript
$(function(){
$("#submit").click(function() {
var options = {
beforeSubmit: getPosition, // pre-submit callback
success: showResponse // post-submit callback
};
// bind form using 'ajaxForm'
$('#addresto').ajaxForm(options);
});
});
function getPosition() {
var geocoder = new GClientGeocoder();
var country = $("#id_country").val();
var city = $("#id_city").val();
var postal_code = $("#id_postal_code").val();
var street_number = $("#id_street_number").val();
var street = $("#id_street").val();
var address = street_number+", "+street+", "+postal_code+", "+city+", "+country;
geocoder.getLatLng( address, function(point) {
if (point) {
alert(point);
$("#id_latitude").val(point.lat())
$("#id_longitude").val(point.lng())
} else {
alert("Geocode was not successful");
}
});
return true;
}
function showResponse() {
alert('response');
}
HTML
<form id="addresto" action="" method="POST">
<!-- some city, country, street... fields -->
<input type="Submit" id="submit" value="Submit" />
</form>
答案 0 :(得分:2)
我相信地理编码器的getLatLng()是异步调用的。这意味着它不会在继续return true;
行之前等待回复。
考虑到这一点,基本上有两种方法:
return false;
。然后,当您收到回复时,您可以从代码中触发提交。答案 1 :(得分:2)
@Jason的第二个解决方案几乎就在那里。
按时间顺序:
有关使用Javascript轮询的更多信息,请参阅a question I had。