2

このGoogle Maps API ジオコード関数の問題コードに従って Google Geocode 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 が送信の処理の前に完全に実行されていないため (アドレスをジオコーディングするための非同期呼び出しであるため)、機能していないと思います。submit 関数で次のように sth を実行するとします。

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 に答える