Как отложить событие submit () до завершения Geocoder? - PullRequest
0 голосов
/ 19 августа 2011

Я работаю над коллажем Google Maps / Google Spreadsheet.

На данный момент я работаю над битом javascript / jquery, который позволяет пользователям заполнять форму, а затем отправляет эту формуGoogle Spreadsheet.

Когда пользователь нажимает кнопку "отправить", скрипт быстро отправит уличный адрес пользователя в геокодер Google, который возвращает эквивалентные значения широты и долготы.

Проблема, с которой я столкнулсясталкивается с тем, что информация о форме отправляется в таблицы Google до моей процедуры Geocoder.Я не могу понять, как изменить событие .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?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Вы можете попробовать это

$("#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(); 
        }
    );

}
1 голос
/ 19 августа 2011
$("#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  
        }
    );

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...