【发布时间】:2011-08-19 03:19:20
【问题描述】:
我正在开发 Google 地图/Google 电子表格混搭。
此时我正在开发一个 javascript/jquery 位,它允许用户填写表单,然后将该表单提交到 Google 电子表格。
当用户点击“提交”时,脚本会快速将用户的街道地址发送到 Google 的 Geocoder,它会返回等效的 lat 和 lng。
我遇到的问题是表单信息在我的 Geocoder 例程完成之前提交到 Google 电子表格。我不知道如何修改 .submit() 事件以防止它在获得 lat 和 lng 之后才提交。
在我的 jQuery 就绪处理程序中,我有这个:
$("#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 函数完成后?
【问题讨论】:
-
这是一个示例页面,其中包含以下给出的答案之一:joshrenaud.com/pd/testcase/google-maps-spreadsheet-test.html
-
当我在 Chrome 中尝试时,控制台显示相同的输出重复多次,直到它'无法读取 null 的属性'0''。我还在学习 JS,但在我无知的头脑中,findAddress 中的 submit() 调用似乎导致它陷入无限循环。
-
一方面,我想通过提交处理程序来完成这项工作。我知道用户一旦单击提交就完成了他们的信息,此时查找 LatLng 是有意义的。但考虑到我让它工作的麻烦,我可能只是将 LatLng 查找移动到表单输入字段上的焦点事件。每当一个字段获得焦点时,检查所有地址字段是否完整。如果是这样,请运行 LatLng 检查。然后在按下提交按钮之前,LatLng 数据将准备就绪。
标签: javascript google-maps jquery google-sheets