2

我正在尝试按照此Google Maps API 地理编码功能问题代码来使用 Google 地理编码 API,但我做错了。我从地理编码开始,然后是 jQuery 验证器,但不知何故,状态没有得到设置。有什么帮助吗?

jQuery(document).ready(function($) {

  var shvalidator = $('#post').validate({
    rules: {
      post_title: { required:true }
    },
    messages:  { 
        post_title: {required:jQuery.format("Enter the name of the venue")} 
    }
  });

  function getAddress() {

    var geocoder = new google.maps.Geocoder();

    var fulladdress = $('#sh_venue_address1').val()+' ' \
      +$('#sh_venue_address2').val()+' ' \
      +$('#sh_venue_city').val()+' ' \
      +$('#sh_venue_state').val()+' ' \
      +$('#sh_venue_postalcode').val();

    alert(fulladdress );
    var a,b;

    geocoder.geocode( { 'address': fulladdress},
    function(results, status) {
     //**// 
     if (status == google.maps.GeocoderStatus.OK) {
        a = results[0].geometry.location.lat();
        b = results[0].geometry.location.lng();
        setAddress(a,b);
      }
    });
  }

  // this is the callback method that waits for response from google
  function setAddress(lat,lng) {
    $('#sh_venue_latitude').val(lat);
    $('#sh_venue_longitude').val(lng);
    alert ($('#sh_venue_latitude').val());
  }

  // this is used to validate the form before submitting
  $('#post').submit(function() {
    getAddress();
    if (shvalidator.valid()==true){
      return true;
    } else {
      $('#ajax-loading').hide();
      $('#publish').removeClass('button-primary-disabled');
      return false;
    }
  });
});
4

1 回答 1

0

我认为它不起作用,因为函数 getAddress 在处理提交之前没有完全执行(因为它是对地址进行地理编码的异步调用)。我想在提交函数中这样做:

getAddress(function(){
if (shvalidator.valid()==true){
      return true;
    } else {
      $('#ajax-loading').hide();
      $('#publish').removeClass('button-primary-disabled');
      return false;
    }
});

并将 getAddress 函数更改为:

function getAddress(callback){
...
setAddress(a,b);
callback();

...
}
于 2013-04-01T17:36:51.840 回答