如何在Geocoder完成之前延迟submit()事件?

时间:2011-08-19 03:19:20

标签: javascript google-maps jquery google-sheets

我正在开发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函数完成之后,如何将提交延迟?

2 个答案:

答案 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(); 
        }
    );

}