2016-07-21 7 views
1

フォームを送信する前に、フォームに挿入されたアドレスのlat longを取得しようとしています。Jqueryフォーム送信、非同期呼び出し、成功時フォーム送信

var success = false; 
var getLat = 0; 
var getLng = 0; 

function getLngLat() { 
    var address = $(".save-new-address").val(); 
    if(!address) return false; 
    if(success) return false; 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      console.log(results); 
      map.setCenter(results[0].geometry.location); 
      success = true; 
      var newMarker = new google.maps.Marker({ 
       position: results[0].geometry.location, 
       map: map 
      }); 
      $(".save-new-lat").val(results[0].geometry.location.lat); 
      $(".save-new-lng").val(results[0].geometry.location.lng); 
     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     };           
    }); 
} 


$("form#save-new-restaurant").submit(function() { 
    getLngLat(); 
    if(success) { 
     return true; 
    } else { 
     getLngLat(); 
     $("form#save-new-restaurant").submit(); 
     return false; 
    } 
}); 

それのほとんどは、単にGoogleの開発者ページからコピーされます。

は、ここに私のコードです。しかし、私が見つける午前はあるのいずれかの形があまりにも速い提出され、その詳細は上記の関数が終了した後に取得した、私はちょうどフォームが送信されるグーグルからデータを取得しようとしています

、とされています私はのデータを持っています。私はフォームを送信したいと思います。これどうやってするの?

答えて

1

var success = false; 
var getLat = 0; 
var getLng = 0; 

function getLngLat() { 
    var address = $(".save-new-address").val(); 
    if(!address) return false; 
    if(success) return false; 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      console.log(results); 
      map.setCenter(results[0].geometry.location); 
      success = true; 
      var newMarker = new google.maps.Marker({ 
       position: results[0].geometry.location, 
       map: map 
      }); 
      $(".save-new-lat").val(results[0].geometry.location.lat); 
      $(".save-new-lng").val(results[0].geometry.location.lng); 

      $("form#save-new-restaurant").unbind("submit"); // unbinding event so getLngLat doesn't execute again 
      document.getElementById('save-new-restaurant').submit(); 
      $("form#save-new-restaurant").bind("submit", formSubmitCallBack); // attaching event for further uses if require 
     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     };           
    }); 
} 


$("form#save-new-restaurant").bind("submit", formSubmitCallBack); 

function formSubmitCallBack() { 
    getLngLat(); 
    return false; 
} 

代わりにこれを試してみてください、これが役立つことを願っています!

+0

これはうまくいきました!ありがとうございました! – Chud37

0

遅延オブジェクトを使用できます。

https://api.jquery.com/jquery.deferred/

$("form#save-new-restaurant").submit(function() { 
    var lngLat = getLngLat(); 
    $.when(lngLat) 
     .done(function() { 
      return true; 
     }) 
     .fail(function() { 
      //handle failure 
     }); 
} 

次に、あなたの他のコード

function getLngLat() { 
    //stuff 
    var deferred = $.Deferred(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      //do stuff 
      deferred.resolve(); 
     } else { 
      deferred.reject(); 
     } 
    } 
    return deferred; 
} 
+0

私はこのアイデアが気に入っていますが、動作させることができません。空白のlng/latsでフォームを送信しています。 – Chud37

関連する問題