我正在开发Google地图/ Google电子表格mashup。
此时我正在开发一个javascript / jquery位,允许用户填写表单,然后将该表单提交给Google电子表格。
当用户点击“提交”时,脚本会快速将用户的街道地址发送到Google的地理编码器,后者返回等效的lat和lng。
我遇到的问题是,在我的地理编码程序例程完成之前,表单信息会提交到Google Spreadsheets 。我无法弄清楚如何修改.submit()事件,以防止它提交,直到我有lat和lng。
在我的jQuery ready处理程序中,我有这个:
$("#ss-form").submit(function(event) {
var street = $('#entry_1').val();
var citystate = $('#entry_2').val();
var country = $('#entry_3').val();
findAddress(street,citystate,country);
});
正在调用此函数:
function findAddress(street, citystate, country) {
var myAddress = [
street,
citystate.toLowerCase(),
country.toLowerCase()
].join(', ');
geocoder.geocode(
{address: myAddress},
function(result,status) {
var myLat = result[0].geometry.location.lat();
var myLng = result[0].geometry.location.lng();
$('#entry_5').val(myLat);
$('#entry_6').val(myLng);
console.log(myLat+','+myLng);
}
);
}
相关的HTML是一个带有六个输入的简单表单(#entry_0到#entry_6)。
所以我想做的是获取Lat和Lng,然后将它们作为值放入HTML表单中,然后让表单提交。在findAddress函数完成之后,如何将提交延迟?
答案 0 :(得分:1)
$("#ss-form").submit(function(event) {
event.preventDefault(); //prevent the submit
var street = $('#entry_1').val();
var citystate = $('#entry_2').val();
var country = $('#entry_3').val();
findAddress(street,citystate,country,$(this));
});
在函数
中提交表单function findAddress(street, citystate, country, form ) {
var myAddress = [
street,
citystate.toLowerCase(),
country.toLowerCase()
].join(', ');
geocoder.geocode(
{address: myAddress},
function(result,status) {
var myLat = result[0].geometry.location.lat();
var myLng = result[0].geometry.location.lng();
$('#entry_5').val(myLat);
$('#entry_6').val(myLng);
console.log(myLat+','+myLng);
form[0].submit(); //submit the form here
}
);
}
答案 1 :(得分:1)
你可以试试这个
$("#ss-form").submit(function(event) {
if(!$(this).data("geocodeset")){
findAddress();
return false;
}
});
function findAddress() {
var $form = $("#ss-form");
var street = $('#entry_1').val();
var citystate = $('#entry_2').val();
var country = $('#entry_3').val();
var myAddress = [
street,
citystate.toLowerCase(),
country.toLowerCase()
].join(', ');
geocoder.geocode(
{address: myAddress},
function(result,status) {
var myLat = result[0].geometry.location.lat();
var myLng = result[0].geometry.location.lng();
$('#entry_5').val(myLat);
$('#entry_6').val(myLng);
console.log(myLat+','+myLng);
$form.data("geocodeset", true).submit();
}
);
}