Javascript 我怎样才能在谷歌地理编码服务更新了隐藏值后才提交表单?

Javascript 我怎样才能在谷歌地理编码服务更新了隐藏值后才提交表单?,javascript,google-maps,geocoding,Javascript,Google Maps,Geocoding,我有一个输入地址的表单,我想在数据库中存储相关坐标。当我有一个单独的地理编码按钮时,它可以很好地更新表单中的隐藏值。然后单击一个单独的提交按钮,这些值将按照我的需要进行存储 但我真正想要的是单击一个按钮,一旦检索到这些值,该按钮将检索坐标并提交表单,而我下面的代码似乎无法完成这一点 <script type="text/javascript"> var geocoder; geocoder = new google.maps.Geocoder(); function codeAddr

我有一个输入地址的表单,我想在数据库中存储相关坐标。当我有一个单独的地理编码按钮时,它可以很好地更新表单中的隐藏值。然后单击一个单独的提交按钮,这些值将按照我的需要进行存储

但我真正想要的是单击一个按钮,一旦检索到这些值,该按钮将检索坐标并提交表单,而我下面的代码似乎无法完成这一点

<script type="text/javascript">
var geocoder;
geocoder = new google.maps.Geocoder();
function codeAddress() {
  var address = document.getElementById("place_name").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        document.getElementById("place_coordinates").value = results[0].geometry.location;
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  // document.forms["new_place"].submit();
}
</script>
<!-- the form -->
<input type="button" value="Submit" onclick="codeAddress()">

var地理编码器;
geocoder=新的google.maps.geocoder();
函数代码地址(){
var address=document.getElementById(“地名”).value;
geocoder.geocode({'address':address},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
document.getElementById(“放置坐标”).value=results[0].geometry.location;
}否则{
警报(“地理编码因以下原因未成功:“+状态”);
}
});
//文件。表格[“新建位置]。提交();
}

目前表单正在提交,但表单中没有“place_坐标”隐藏值。非常感谢您的帮助

如果您取消默认表单提交,然后自己从geocode调用的回调函数中提交表单,那么应该可以做到这一点

不要处理按钮的点击,而是处理表单的提交事件,确保返回false以取消默认提交(在这种情况下,我返回函数的结果,因此确保函数返回false):


var地理编码器;
geocoder=新的google.maps.geocoder();
函数代码地址(格式){
var address=document.getElementById(“地名”).value;
geocoder.geocode({'address':address},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
document.getElementById(“放置坐标”).value=results[0].geometry.location;
submit()格式;
}否则{
警报(“地理编码因以下原因未成功:“+状态”);
}
});
返回false;
}
请注意,我已将表单提交放在if/else的OK分支中,因此,如果地理编码不成功,则不会提交表单。显然,您可以将其移动到else案例之后,但如果您想继续并以任何一种方式提交,仍然可以在回调函数中进行

另外,请注意,我正在将对表单的引用传递到函数中-您不必这样做,但我认为这样更整洁

<form onsubmit="return codeAddress(this);">

<script>
var geocoder;
geocoder = new google.maps.Geocoder();
function codeAddress(theForm) {
  var address = document.getElementById("place_name").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        document.getElementById("place_coordinates").value = results[0].geometry.location;
        theForm.submit();
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });

  return false;
}
</script>